[英]How to go from a multiple line sed command in command line to single line in script
如果將其復制並粘貼到打開的外殼中,則可以使用以下參數運行sed:
cat test.txt | sed '/[,0-9]\{0,\}[0-9]\{1,\}[acd][0-9]\{1,\}[,0-9]\{0,\}/{N
s/[,0-9]\{0,\}[0-9]\{1,\}[acd][0-9]\{1,\}[,0-9]\{0,\}\n\-\-\-//}'
問題是,當我嘗試將其移入KornShell(ksh)腳本時,由於我認為這是換行符,因此ksh會引發錯誤。 有人可以幫我嗎? 僅供參考:正則表達式應該是多行替換。
謝謝!
此: \\{0,\\}
可以替換為: *
此: \\{1,\\}
可以替換為: \\+
不必轉義連字符。
換行符可以用-e
(或分號)代替
可以通過使用文件名作為sed
的參數來替換cat
結果:
sed -e '/[,0-9]*[0-9]\+[acd][0-9]\+[,0-9]*/{N' -e 's/[,0-9]*[0-9]\+[acd][0-9]\+[,0-9]*\n---//}' test.txt
要么
sed '/[,0-9]*[0-9]\+[acd][0-9]\+[,0-9]*/{N;s/[,0-9]*[0-9]\+[acd][0-9]\+[,0-9]*\n---//}' test.txt
(未試)
您可以嘗試將正則表達式放入文件中並使用-f選項調用sed嗎?
cat test.txt | sed -f file.sed
您可以嘗試用`echo -e \\\\ r`替換換行符嗎?
與C Shell不同,Korn Shell對字符串中的換行符沒有任何問題。 因此,換行符不太可能是您的問題。 相同的注釋適用於Bourne和POSIX外殼以及Bash。 我已經復制了您的示例,並在Linux上的Bash和Korn Shell下運行了它,沒有任何問題。
如果您使用C Shell進行工作,是否確定運行的是' ksh ./script
'而不是' ./script
'?
否則,還有其他問題-也許某處的報價不平衡。
在Korn Shell程序中檢出-v
和-n
選項以及-x
選項。 這可能會告訴您更多有關問題所在的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.