![尝试从包含 \ (行连接器)的大文件中打印整行](https://linux22.com/image/106500/%E5%B0%9D%E8%AF%95%E4%BB%8E%E5%8C%85%E5%90%AB%20%5C%20%EF%BC%88%E8%A1%8C%E8%BF%9E%E6%8E%A5%E5%99%A8%EF%BC%89%E7%9A%84%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%AD%E6%89%93%E5%8D%B0%E6%95%B4%E8%A1%8C.png)
我正在尝试从具有特定单词主机的文件中收集行:例如单词主机,我需要获取所有主机名称的输出。这是我的文件:
host= mx,rt,fd,rt,wed,asd, \
fm, jklf,dfd,dfd
host = jd,er,ew,yu,tg,ed,ik,cs,\
fd, gr, jy
host = mz,fg,jh
我在用 :
$grep -i 主机文件名 | awk '{打印$2}'
仅适用于第一行,在 \ 之后不输出任何名称
所以输出是;
mx,rt,fd,rt,wed,asd, \
jd,er,ew,yu,tg,ed,ik,cs,\
mz,fg,jh
正如你所看到的,我在 \ 之后没有得到该行的其余部分
我不想摆脱 \ 我想保留它,我可以移动它并连接所有名称,所以它将被视为 one_line ,但我不想这样做。
任何想法,值得赞赏,它可能很容易,但我可以让它工作,即使我使用 tr.
答案1
你可以这样做:
sed '
# delete all but lines starting with host= (allowing blanks)
/^[[:blank:]]*host[[:blank:]]*=[[:blank:]]*/!d
# remove that host= part
s///
:1
/\\$/{
# if the line ends in \, append the next line and loop
N;b1
}'
答案2
试一试awk '{gsub("host","");gsub("=","");print;}' filename
awk
删除host
然后=
只打印每一行。