Unixでsedコマンドを使用する

Unixでsedコマンドを使用する

ファイルから単語を取得して絶対パスに変更するには?デフォルトでは、Unixファイルから1つの単語を取得し、そのファイル内の絶対ディレクトリパスに変更する必要があります。ファイル名はhttpd.confです。このファイルのパスは /home/Tina/apache/conf/httpd.conf です。行は ServerRoot "/usr" です。 "/usr"を/home/Tina/apacheに変更する必要があります。

Tina@Irv-PC ~/apache/conf
$ cat httpd.conf
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.

# Do not add a slash at the end of the directory path.
#
ServerRoot "/usr"

#
# DocumentRoot: The directory out of which you will serve your documents.
#
DocumentRoot "/Library/WebServer/Documents"

答え1

この試み:

$ sed -i.orig '/ServerRoot/s_"/usr"_/home/Tina/apache_' /home/Tina/apache/conf/httpd.conf

周囲に二重引用符を入れるには/home/Tina/apache

$ sed -i.orig '/ServerRoot/s_"/usr"_"/home/Tina/apache"_' /home/Tina/apache/conf/httpd.conf

まず、行に「ServerRoot」(/ServerRoot/)が含まれている場合は一致し、そうであれば必要な置換(s_"/usr"_"/home/Tina/apache"_)を実行します。/pathで使用したのと同じように、代替区切り_文字を使用しましたsed。変更されたファイルはであり、/home/Tina/apache/conf/httpd.conf元のファイルはのままです/home/Tina/apache/conf/httpd.conf.orig

答え2

副作用を避けるために行全体を交換します。

sed -i.bak -e 's#^ *ServerRoot  *"/usr" *$#ServerRoot "/home/Tina/apache"#' httpd.conf

\/通常、「s / from / to /」が使用されますが、どこにもスラッシュがあるため、他の文字を使用するのが賢明であるため、式のすべてのパス区切り文字にスラッシュを書き込む必要はありません。^...$まったく同じ行で構成された行だけを一致するようにfrom式を使用します(行^の先頭、$行の終わり)。

Switchは-iファイルを内部で編集しますが、にバックアップされますhttpd.conf.bak。これは、システム構成ファイルを編集するときに非常に良いアイデアです。

代替区切り記号をサポートしていない場合はsed試してみてください

sed -i.bak -e 's/^ *ServerRoot  *"\/usr" *$/ServerRoot "\/home\/Tina\/apache"/' httpd.conf

関連情報