私のファイルには、次の行のリストがあります。
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
これにより、ファイルに含まれている行が削除されます。
grepを使用すると、次のことができます。
$ echo "$(grep -v "pattern to match" File)" > File
この-v
オプションを使用すると、含まれていない行に対してgrepを許可してから、pattern to match
再びFileにリダイレクトできます。
答え2
ご覧のとおり、ファイルに特殊文字が含まれています。このコマンドを使用してすべての行を削除できます。各行の文字列属性を指定する必要があります。たとえば、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
ご覧のとおり、2行目はありません。sed -i '\|ipv4|d' testRun.chk
次の行 ""などに対してこれを行うことができます。
頑張ってください!