
次のファイルの行「disable = yes」を「disable = no」に変更したいと思います。
[root@centos2 ~]# cat /etc/xinetd.d/tftp
service tftp
{
...
server_args = -s /var/lib/tftpboot
disable = yes
per_source = 11
...
}
これを試してみました:
[root@centos2 ~]# grep 'disable = yes' /etc/xinetd.d/tftp
[root@centos2 ~]#
マウスでスペースをコピーするだけで、何も grep されません...
「disable」と「=」の間にある要素が何であるかを、なぜ、どうすれば知ることができるのでしょうか? 複数のスペースですか? タブですか?
次の正規表現を使用して grep できることはわかっています。
[root@centos2 xinetd.d]# grep -E 'disable.+= yes' /etc/xinetd.d/tftp
disable = yes
[root@centos2 xinetd.d]#
そして最後に、sed を使用して「yes」を「no」に置き換える、次よりも良い方法はありますか?
[root@centos2 xinetd.d]# sed -r 's/disable.+= yes/disable =
no/g' /etc/xinetd.d/tftp
service tftp
{
...
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
...
}
編集 :
od コマンドの結果 @ilkkachu に感謝します
[root@centos2 xinetd.d]# < /etc/xinetd.d/tftp grep disable | od -c
0000000 \t d i s a b l e
0000020 = y e s \n
0000037
答え1
スペースは一般的に「空白」として知られており、スペースだけでなくタブ(およびその他の「空白」文字)も含まれることがあります。正規表現では、これらを( REエンジンに応じて[[:space:]]
)または\s
(REエンジンに応じて)のいずれかで参照することができます。水平(スペース、タブ、および利用可能な場合はさまざまな幅のUnicodeスペース文字)には、[[:blank:]]
およびを使用することもできます\h
。垂直スペース文字 (改行、フォーム フィード、垂直タブ、キャリッジ リターンなど)。Microsoftテキスト ファイル内の不要なキャリッジ リターン文字をカバーするために、[[:space:]]
の代わりに使用されることがあります。[[:blank:]]
を で置き換えることはできませんgrep
。これは単なる検索ツールです。代わりに、 を で置き換えるには、yes
次no
のようなコマンドを使用します。
sed '/disable\>/s/\<yes\>/no/' /etc/xinetd.d/tftp
これは、単語 を含む行でsed
単語yes
を に置換(変更)するように指示します。((最初は/正規表現演算子)は、一部の実装では単語の終わりを強制します(ただし、no
disable
\>
ex
vi
sed
空白で区切られた単語disable-option
、 )にも一致します。便利なことに、これにより空白の問題が完全に回避されます。
注意してください: のような行ではeyes yes
、無制限のyes
置換が の最初のインスタンスに適用されyes
、 が残りますeno yes
。そのため、\<yes\>
ではなく を使用していますyes
。
答え2
「disable」と「=」の間にある要素が何であるかを、なぜ、どうすれば知ることができるのでしょうか? 複数のスペースですか? タブですか?
おそらくタブです。
< /etc/xinetd.d/tftp grep disable | od -c
\t
と表示されます。タブは、スペースはスペースとして表示されます。
答え3
grepの代替手段を試してくださいふるいにかけるからsift-tool.org- インテリジェントな正規表現パターンマッチングを行うステロイドのgrepです