Bash如何将单词追加到一行?

Pal*_*han 11 unix bash awk grep sed

我在bash中执行了一个命令来从这样的文件中检索一些地址:

grep address file.txt | cut -d'=' -f2 | tr ':' ' '
Run Code Online (Sandbox Code Playgroud)

收益率:

xxx.xx.xx.xxx port1
xxx.xx.xx.xxx port2
Run Code Online (Sandbox Code Playgroud)

和我想"eth0的"附加到每个这些输出线,然后理想地用于遍历结果来调用与每行的命令.我遇到的问题是在每一行的末尾都有额外的字符串.我试过了:

| sed -e 's/\(.+)\n/\1 eth0/g'
Run Code Online (Sandbox Code Playgroud)

哪个没有用..然后假设我把它拿到那里,如果我将它包装在for循环中它将不会传递整行,因为它们包含空格.那么我该怎么做呢?

Fat*_*ror 19

您可以匹配$以附加到一行,例如:

sed -e 's/$/ eth0/'
Run Code Online (Sandbox Code Playgroud)

编辑:

为了循环,我建议使用一个while循环,如:

while read line
do
  # Do your thing with $line
done < <(grep address file.txt | cut -d'=' -f2 | tr ':' ' ' | sed -e 's/$/ eth0')
Run Code Online (Sandbox Code Playgroud)


Chr*_*our 8

如何使用awk:

awk -F= '/address/{gsub(/:/," ");print $2,"eth0"}' file
Run Code Online (Sandbox Code Playgroud)

演示:

$ cat file
junk line
address=192.168.0.12:80
address=127.0.0.1:25
don not match this line

$ awk -F= '/address/{gsub(/:/," ");print $2,"eth0"}' file
192.168.0.12 80 eth0
127.0.0.1 25 eth0
Run Code Online (Sandbox Code Playgroud)

或者只是sed:

$ sed -n '/address/{s/:/ /g;s/.*=//;s/$/ eth0/p}' file
192.168.0.12 80 eth0
127.0.0.1 80 eth0
Run Code Online (Sandbox Code Playgroud)