[英]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.