繁体   English   中英

在 shell 脚本中处理 sed 命令中的反向引用

[英]Dealing with backreference in a sed command inside a shell script

我正在尝试在 shell 脚本中使用 sed 命令,该脚本在与用户交互时接受变量,但由于我在其中使用了反向引用,我无法使其工作......一些帮助......?

脚本:

echo "Origin language?\n"
read ol
echo "\nTarget language?\n"
read tl
echo "\ntmx file name?\n"
read file

然后在 sed 命令中,我尝试了以下方法:

1.

sed -r "s/lang=\"$ol\">(.*)$/\1/g" "$file" > ${file}_${ol}.txt
sed -r "s/lang=\"$tl\">(.*)$/\1/g" "$file" > ${file}_${tl}.txt

2.

thisol = "<tuv xml:lang=\"$ol\">(.*)$"
thistl = "<tuv xml:lang=\"$tl\">(.*)$"

sed -r "s/$thisol/\1/g" "$file" > ${file}_${ol}.txt
sed -r "s/$thistg/\1/g" "$file" > ${file}_${tl}.txt

3.

thisol = "<tuv xml:lang=\"$ol\">(.*)$"
thistl = "<tuv xml:lang=\"$tl\">(.*)$"
that = "\\\1"

sed -r "s/$thisol/$that/g" "$file" > ${file}_${ol}.txt
sed -r "s/$thistg/$that/g" "$file" > ${file}_${tl}.txt

根据@EdMorton 的评论,我可以找到这个问题的答案,我不得不稍微修改一下他提出的建议,但最后我意识到这不是我需要的,我应该这样做grep,这里的任何方式都是完成问题所暗示的正确代码,以及我使用的最终 grep 命令(我从这里学到的)

sed 命令:

sed -r '/<tuv xml:lang='\"$ol\"'>/{N;/<seg>/{N;s/<tuv xml:lang='\"$ol\"'>\n\s+<seg>(.*)<\/seg>/\1/}}' "$file.tmx" > "${file}_${ol}.txt"

在哪里:

/<tuv xml:lang='\\"$ol\\"'>/从起始行开始的 RegEx

{N;/<seg>/来自终点线的 RegEx

{N;s/<tuv xml:lang='\\"$ol\\"'>\\n\\s+<seg>(.*)<\\/seg>搜索到的完整正则表达式

/\\1/(.*)元素的反向引用

grep 命令:

grep -Pzo "<tuv xml:lang=\"$ol\">\n\s+<seg>(.*)<\/seg>" "$file.tmx" > "${file}_${ol}.txt"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM