如何 sed 只包含给定形式的行?

如何 sed 只包含给定形式的行?

这是输入:

asdfZE3033141xycf
asdfINSFRHxycf

我需要这个输出:

asdfZE3033141

asdfINSFRHxycf

所以我用了一个:

echo -e 'asdfZE3033141xycf\nasdfINSFRHxycf' | sed '/asdfZE3033141xycf/ s=xycf$=\n='

但我一般需要这个。所以我需要 sed every:

asdfZE[0-9][0-9][0-9][0-9][0-9][0-9][0-9]xycf

文本文件中的行。我只是无法将“[0-9]”放入 sed 中。我怎样才能做到这一点?

答案1

为什么不稍微修改一下你的工作:

echo -e 'asdfZE3033141xycf\nasdfINSFRHxycf' | sed -e 's/^\(asdfZE[0-9]\{7\}\)xycf$/\1\n/'

答案2

“[0-9]”有什么问题?为什么不能将其放入 sed 中?

使用时可以简单地使用

sed '/asdfZE[0-9][0-9][0-9][0-9][0-9][0-9][0-9]xycf/s=xycf$=\n=' file

甚至

sed '/asdfZE[0-9]\{7\}xycf/s=xycf$=\n=' file

sed 在搜索模式中支持正则表达式。

答案3

不明白你的意思。

关于什么:

sed 's/^\(asdfZE[0-9]\{7\}\)xycf$/\1\
/'

? (反斜杠后跟一个真正的换行符是在命令右侧插入换行符的标准方法s(而不是\n))。

相关内容