如何在 Vi 中将被图案分隔的多条线连接成一条



例如:

猫文件1

a="Ajim 123 Bagwan"
b="Johnny 120 Boy"
c="Bad 777 Girl"
<SHOUT>
a="Aj 30 Bag"
b="John 10 Boycott"
c="Badlands 20 Malick"
<SHOUT>
.........

我的输出应如下所示:

"Ajim 123 Bagwan" | "Johnny 120 Boy" | "Bad 777 Girl"
<SHOUT>
"Aj 30 Bag" | "John 10 Boycott" | "Badlands 20 Malick"
<SHOUT>

即由模式分隔的 3 行集合(或只是值也可以"<SHOUT>"模式应该在其中与一些分隔符连接起来。最好的方法是什么?

我一直在尝试的方法是通过管道(|)搜索替换(在 vi 中使用 %s/A/B)模式(跨越 2 行)"\Nb="和"\Nc="。我以前做过这种方式,但我只是不明白。 是换行符 (控件-M)

编辑:

我能够找到一种使用简单搜索替换来做到这一点的方法。我从 vi 中做了以下工作。

:%s/"nb="/|/g
:%s/"nc="/|/g

其中 是换行符。

这两个命令将每次出现的"b="和"c="替换为 pipe(|) 字符。然后我只是使用类似的命令将开头 a=" 和结尾 " 替换为 null。

:%s/a="//g
:%s/"//g

谢谢大家的回答。

while read line; do
   if [ "$line" = "<SHOUT>" ]; then
       echo
       echo $line
       prefix=""
   else
       echo -n "$prefix${line#*=}"
       prefix=" | "
   fi
done < file1 

编写一个 shell 脚本 (test.sh):

read acc
while read line; do
    if [ "$line" == "<SHOUT>" ]
    then
        echo "$acc"
        echo "<SHOUT>"
        read acc
    else
        acc="$acc | $line"
    fi
done
echo "$acc"

在命令行中按如下所示运行此脚本:sh test.sh

使用 awk 你可以做到:

awk 'NF{gsub(/.=/, ""); gsub(/n/, " | "); printf "%sn%s", $0, RS}' RS='<SHOUT>n' file
"Ajim 123 Bagwan" | "Johnny 120 Boy" | "Bad 777 Girl" | 
<SHOUT>
"Aj 30 Bag" | "John 10 Boycott" | "Badlands 20 Malick" | 
<SHOUT>

相关内容

  • 没有找到相关文章

最新更新