次のファイルの「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 ~]#
マウスでスペースをコピーすると、何も認識されません。
「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
...
}
編集する:
@ilkkachuのおかげでodコマンドの結果
[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
スペースはしばしば「スペース」と呼ばれ、スペースだけでなくタブ(および他の「スペース」文字)も含めることができます。正規表現では、通常、[[:space:]]
または\s
(REエンジンによる)を使用して参照できます。水平[[:blank:]]
(スペース、タブ、幅の異なる一部のUnicodeインターバル文字\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の代替案をお試しください画面~からスクリーニングツール.org- スマート正規表現パターンマッチングのためにステリオドをgrepします。