vim和sed单行:否定搜索,多次搜索被替换的行,打开文件并在vim编辑器中高亮显示



下面是我想在一行中做的事情:
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。

最新更新