繁体   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