Avi*_*abu 2 bash sed text-processing
我在 Linux 机器上有一个包含字符串的文本文件:
appset.org 87.76.29.21 ns1.appset.org ns2.appset.org
bbchannel.eu 87.77.29.25 ns1.appset.org ns2.appset.org
cyberset.it 87.76.29.22 ns1.appset.org ns2.appset.org
cybersetsystems.com 87.76.29.21 ns1.appset.org ns2.appset.org
romelidays.com 87.98.29.21 ns1.appset.org ns2.appset.org
novaprospect.eu 87.76.29.21 ns1.appset.org ns2.appset.org
Run Code Online (Sandbox Code Playgroud)
我想要的只是删除从 IP 地址开始的部分,并获得仅包含网站名称的输出,例如appset.org
, bbchannel.eu
.
我试过的代码是:
#!/bin/bash
while read p; do
echo "$p" | cut -c 1-13
done <experiment
Run Code Online (Sandbox Code Playgroud)
但好像不太对。我也尝试过使用该sed
命令,但我的逻辑仍然不起作用。我对 bash 真的很陌生。任何帮助将非常感激。
您获得了适合这项工作的工具cut
,但是却使它变得比您需要的要复杂得多。绝对没有理由在这里使用 bash 循环,这只会使事情变得更慢和更复杂。cut
将自行处理文件中的每一行。但是,默认分隔符cut
是制表符,而不是空格,因此您需要使用-d
标志告诉它切入空格。然后,相反,它告诉削减特定字符,只要告诉它打印的第一场具有-f 1
:
$ cut -d' ' -f 1 file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu
Run Code Online (Sandbox Code Playgroud)
使用sed
,您将尝试删除第一个空格后的所有内容:
$ sed 's/ .*//' file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu
Run Code Online (Sandbox Code Playgroud)
或者,您可以awk
默认使用which 拆分为空格上的字段:
$ awk '{print $1}' file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu
Run Code Online (Sandbox Code Playgroud)
或 perl:
$ perl -pe 's/\s.*//' file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu
Run Code Online (Sandbox Code Playgroud)
或者再次 perl:
$ perl -lane 'print $F[0]' file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu
Run Code Online (Sandbox Code Playgroud)
您甚至可以在 shell 中执行此操作,但是对于较大的文件,这会慢得多,并且通常不是一个好主意:
$ while read want rest; do echo "$want"; done < file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu
Run Code Online (Sandbox Code Playgroud)
或者,对于任意输入更安全:
$ while read -r want rest; do printf '%s\n' "$want"; done < file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu
Run Code Online (Sandbox Code Playgroud)