Ich möchte die Zeile "disable = yes" in "disable = no" in die folgende Datei ändern:
[root@centos2 ~]# cat /etc/xinetd.d/tftp
service tftp
{
...
server_args = -s /var/lib/tftpboot
disable = yes
per_source = 11
...
}
Ich habe es versucht:
[root@centos2 ~]# grep 'disable = yes' /etc/xinetd.d/tftp
[root@centos2 ~]#
indem ich nur das Leerzeichen mit meiner Maus kopiere, aber es greift nichts ...
Warum und wie kann ich wissen, welche Elemente zwischen "deaktivieren" und "=" liegen? Sind es mehrere Leerzeichen? Tabellen?
Ich weiß, dass ich mit dem folgenden regulären Ausdruck grep kann:
[root@centos2 xinetd.d]# grep -E 'disable.+= yes' /etc/xinetd.d/tftp
disable = yes
[root@centos2 xinetd.d]#
Und schließlich gibt es eine bessere Möglichkeit, "Ja" durch "Nein" mit sed zu ersetzen als die folgenden:
[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
...
}
EDIT:
Ergebnis des Befehls od danke @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
disable
nicht am Anfang einer Zeile standen. Ich habe meinen RE entsprechend geändert.sed '/disable\>/s/\<yes\>/no/' <<<' disable = yes'
funktioniert auch bei mir nicht (unter MacOS mit BSD sed). Der ursprüngliche Code des OP funktioniert jedoch gut mit GNU sed (v4.4).docker run -i centos:latest sed '/disable\>/s/\<yes\>/no/' <<<' disable = yes'
Wahrscheinlich Tabs. Sie könnten so etwas wie gebrauchen
sehen. Es werden Tabulatoren als
\t
und Leerzeichen als Leerzeichen angezeigt.quelle
grep
nicht funktionieren sollte, sorryProbieren Sie die grep-Alternative sift von sift-tool.org aus - ist grep für Sterioden, die einen intelligenten Regex-Mustervergleich durchführen
quelle