
我想將以下文件中的“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 將“是”替換為“否”:
[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
空格通常被稱為“空白”,不僅可以包含空格,還可以包含製表符(以及其他“空白”字元)。在正規表示式中,您通常可以使用[[:space:]]
或\s
(取決於 RE 引擎)來引用它們,其中包括水平的(空格、製表符和一些不同寬度的 unicode 間距字元(如果有))您也可以使用[[:blank:]]
,有時\h
和垂直的間隔字元(如換行、換頁、垂直製表符或回車)。[[:space:]]
有時使用 代替 來[[:blank:]]
覆蓋 Microsoft 文字檔案中的虛假回車符。
您不能替換為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- 是 steriods 上的 grep 進行智慧型正規表示式模式匹配