我正在尝试在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
答案 0 :(得分:0)
根据@EdMorton的评论,我可以找到这个问题的答案,我不得不修改他的建议,但最后我意识到这不是我需要的,我应该有用grep完成它,这里的任何方式都是正确的代码来完成问题上隐含的内容,以及我使用的最终grep命令(我从here学到的)
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>
搜索完整的RegEx
/\1/
对(.*)
元素的反向引用
Grep命令:
grep -Pzo "<tuv xml:lang=\"$ol\">\n\s+<seg>(.*)<\/seg>" "$file.tmx" > "${file}_${ol}.txt"