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