下面是我想在一行中做的事情:
1.在文件ak.txt中搜索与模式不匹配的行,用<the negate matched line>|
:替换每一行
$ sed -n '/.*[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9]$/!s:.*:\<&\>\|:p' ak.txt
输出:
<ee integration_01.32.00>|
<ration_01.2.000>|
<gon_1.21.000>|
<dkei_ting-on_1.2.00>|
<see integration instructions>|
上面的作品,我不希望最后两个字符在最后一行
2.要求"VIM"多次突出显示替换行搜索,抛出错误,下面是命令:
$ vim -c "/`sed -n '/.*[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9]$/!s:.*:\<&\>\|:p' ak.txt`" -c 'set hls' ak.txt
错误:
bash: .: unrecognized history modifier
我想我们得到了我想要得到的,我们如何通过VIM和SED告诉BASH?
如果必须在一行中完成,则:
sed -n '/.*[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9]*$/!{ s:.*:\<&\>\|:; $s/\|$//; p; }' ak.txt
或:
sed -n '/.*[0-9][0-9].[0-9][0-9].[0-9]{3}*$/!{ s:.*:\<&\>\|:; $s/\|$//; p; }' ak.txt
这需要您的基本操作,但使用{
和}
对3个操作进行分组。第一个是替换操作,没有改变(我很想把:
改成/
,但没有)。第二个只匹配文件的最后一行,并删除似乎是您主要目标的尾部|
。第三个操作打印行。
如果最后一行在末尾实际匹配dd.dd.ddd(其中d表示一个数字),这将遇到问题。如果这是一个问题,你可能需要使用两个sed
命令(如果你想要的话,你可以在一行上写,但我不会在一行写):
sed -n '/.*[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9]$/!s:.*:\<&\>\|:p' ak.txt |
sed '$s/\|$//'
第一行正是您最初的命令;第二个简单地删除最后一行末尾的CCD_ 8。