簡體   English   中英

如何從命令行中的多行sed命令轉到腳本中的單行

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM