我的文件中有一个如下所示的行列表:
6642a51e0ed5e6f89e5e4090b9aa0fb3 /home/device/eth0/uid
d66d1417251a9a151176c34acf046878 /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961 /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595 /home/device/eth1/netmask
我想从此文件中删除某些行,不带任何空行。
我发现sed
这是合适的命令,尽管我尝试了几种方法并查看了其他人的工作,但我仍然不知道该怎么做。
这就是我所拥有的sed -i "s|'/home/device/pn'|d" TestRun.chk
但它不起作用......我读过有关如何打破斜杠以及如何不使用它的文章。我只是不知道这是否适合我的情况。
非常感谢您的帮助!
编辑:
输入示例:
6642a51e0ed5e6f89e5e4090b9aa0fb3 /home/device/eth0/uid
d66d1417251a9a151176c34acf046878 /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961 /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595 /home/device/eth1/netmask
运行sed
命令以删除/home/device/eth1/ipv4
预期输出后:
6642a51e0ed5e6f89e5e4090b9aa0fb3 /home/device/eth0/uid
d66d1417251a9a151176c34acf046878 /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961 /home/device/eth1/dhcp
13b376c06f904b607c2a23bd76115595 /home/device/eth1/netmask
答案1
使用sed
,您可以执行以下操作:
$ sed -i '\| pattern to match |d' File
这将删除pattern to match
File 中包含的行。
使用 grep,您可以执行以下操作:
$ echo "$(grep -v "pattern to match" File)" > File
该-v
选项允许 grep 不包含 的行pattern to match
,然后将其重定向回 File。
答案2
正如我所看到的,您的文件包含特殊字符/您可以使用此命令删除任何行,您应该指定每行的字符串特征,例如第二行是“uid64”:
sed -i '\|uid64|d' testRun.chk
In my pc it's print this without blank line :
6642a51e0ed5e6f89e5e4090b9aa0fb3 /home/device/eth0/uid
db5c3c9d348ce26169c56901a7606961 /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595 /home/device/eth1/netmask
正如您所看到的,没有第二行,您可以对下一行“ sed -i '\|ipv4|d' testRun.chk
”等执行此操作。
祝你好运!