如何从文件中取出一个单词并将其更改为绝对路径?基本上我需要从 unix 文件中取出一个单词并将其更改为该文件中的绝对目录路径。文件名为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"_
)。正如您/
在路径中所使用的那样,我们使用了替换分隔_
符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 表达式放在周围,以确保仅匹配由完全相同的行组成的行(^
是行的开头,$
行的结尾)
交换机-i
将就地编辑您的文件,但会备份到httpd.conf.bak
,这在编辑系统配置文件时是一个非常好的主意。
如果您sed
不支持备用分隔符,您可以尝试
sed -i.bak -e 's/^ *ServerRoot *"\/usr" *$/ServerRoot "\/home\/Tina\/apache"/' httpd.conf