如果我将其复制并粘贴到一个打开的shell中,我已经运行了以下参数:
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)
这个:\{0,\}
可以替换为:*
这个:\{1,\}
可以替换为:\+
没有必要逃避连字符。
可以用-e
(或分号)
可以使用文件名作为cat
sed
结果:
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
(未测试的)
答案 1 :(得分:0)
您可以尝试将正则表达式放在一个文件中,并使用选项-f?
调用sedcat test.txt | sed -f file.sed
答案 2 :(得分:0)
您可以尝试用`echo -e \\ r`
替换换行符答案 3 :(得分:0)
Korn Shell - 与C Shell不同 - 字符串中的换行没有问题。因此,换行不太可能成为您的问题。相同的注释适用于Bourne和POSIX shell以及Bash。我已经复制了你的例子并在Linux下在Bash和Korn shell下运行它没有任何问题。
如果你使用C Shell进行工作,你确定自己正在运行“ksh ./script
”而不是“./script
”吗?
否则,还有一些其他问题 - 或许在某处出现不平衡的报价。
查看“-v
”和“-n
”选项以及Korn Shell的“-x
”选项。这可能会告诉您更多问题所在。