@adonia
2016-11-02T03:20:20.000000Z
字数 5342
阅读 173
操作系统
需要向配置文件的末尾追加文本信息。例如:现有mysql的配置信息(/etc/mysql/my.cnf
),内容如下:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
skip-host-cache
skip-name-resolve
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
symbolic-links=0
!includedir /etc/mysql/conf.d/
需要在文件末尾添加如下信息:
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
追加文本的命令语法为:
sed -i '$a\append_word' file_name
Notes:
append_word
为待插入的文本字段
file_name
为待修改的文件路径
针对上述示例,对应的执行语句为:
sed -i '$a\sql_mode = \"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"' /etc/mysql/my.cnf
Tips:
注意转义字符
文本追加,也可以使用形如
echo "append_word" >> file_name
的方式
如果需要向配置文件中的每一行的下一行都增加指定的文本字段,可使用如下命令:
sed -i '/$/a append_word' file_name
Notes:
append_word
为待插入的文本字段
file_name
为待修改的文件路径
例如,源文件内容为:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
skip-host-cache
skip-name-resolve
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
symbolic-links=0
!includedir /etc/mysql/conf.d/
执行命令sed -i '/$/ac' /etc/sql/my.cnf
后,文件内容如下:
[client]
c
port = 3306
c
socket = /var/run/mysqld/mysqld.sock
c
c
[mysqld_safe]
c
pid-file = /var/run/mysqld/mysqld.pid
c
socket = /var/run/mysqld/mysqld.sock
c
nice = 0
c
c
[mysqld]
c
skip-host-cache
c
skip-name-resolve
c
user = mysql
c
pid-file = /var/run/mysqld/mysqld.pid
c
socket = /var/run/mysqld/mysqld.sock
c
port = 3306
c
basedir = /usr
c
datadir = /var/lib/mysql
c
tmpdir = /tmp
c
lc-messages-dir = /usr/share/mysql
c
explicit_defaults_for_timestamp
c
c
symbolic-links=0
c
c
!includedir /etc/mysql/conf.d/
c
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
c
语法格式为: sed -i 's/pattern/replace/g' file_name
Notes:
pattern
是指待匹配的字符字段
replace
是指需要替换成的字符字段
file_name
是指需要处理的文件路径
例如,对于如下文本内容:
This is my cat
my cat's name is betty
This is my dog
my dog's name is frank
This is my fish
my fish's name is george
This is my goat
my goat's name is adam
现要将文本中每行的my
替换为his
,命令如下:
sed -i 's/my/his/g' pet.txt
结果如下:
This is his cat
his cat's name is betty
This is his dog
his dog's name is frank
This is his fish
his fish's name is george
This is his goat
his goat's name is adam
Tips: 如果替换的字段包含了原字段,也就是在原字段的基础上左右加些字符,可以用
&
作为被匹配的变量。如将上述的his
替换成[his]
,对应的命令为:sed -i 's/his/[&]/g' pet.txt
。
语法格式为: sed -i 's/^/insert_word/g' file_name
Notes:
^
表示每行开头
insert_word
表示需要插入的字段
file_name
表示需要处理的文件路径
例如,需要在上述文本的每行开头增加line no:
,命令如下:
sed -i 's/^/line no: /g' pet.txt
结果如下:
line no: This is his cat
line no: his cat's name is betty
line no: This is his dog
line no: his dog's name is frank
line no: This is his fish
line no: his fish's name is george
line no: This is his goat
line no: his goat's name is adam
语法格式为: sed -i 's/$/append_word/g' file_name
Notes:
$
表示文本结尾
append_word
表示每行需要追加的字符字段
file_name
表示待处理的文件路径
例如,需要在上述文本的每行结尾追加...
,命令如下:
sed -i 's/$/.../g' pet.txt
结果如下:
This is his cat ...
his cat's name is betty ...
This is his dog ...
his dog's name is frank ...
This is his fish ...
his fish's name is george ...
This is his goat ...
his goat's name is adam ...
对原有的文本文件稍作修改,如下:
This is his cat, his cat's name is betty
This is his dog, his dog's name is frank
This is his fish, his fish's name is george
This is his goat, his goat's name is adam
语法格式为: sed -i 'ns/pattern/replace/g' file_name
Notes:
n
表示行号
pattern
表示待匹配的字段
replace
表示替换成的字段
file_name
表示待处理的文件路径
例如,将上述文本中的第三行的his
替换成my
,命令为: sed -i '3s/his/my/g' pet.txt
结果如下:
This is his cat, his cat's name is betty
This is his dog, his dog's name is frank
Tmy is my fish, my fish's name is george
This is his goat, his goat's name is adam
语法格式为: sed -i 'm,ns/pattern/place/g' file_name
Notes:
m,n
分别表示起始行和结束行
pattern
表示待匹配的字符字段
replace
表示替换成的字段
file_name
表示待处理的文件路径
例如,将上述文本中的2~4行中的his
替换成my
,命令为: sed -i '2,4s/his/my/g' pet.txt
结果如下:
This is his cat, his cat's name is betty
Tmy is my dog, my dog's name is frank
Tmy is my fish, my fish's name is george
Tmy is my goat, my goat's name is adam
语法格式为: sed -i 's/pattern/replace/n' file_name
Notes:
pattern
表示待匹配的字符字段
replace
表示替换成的字符字段
n
表示匹配的列数,即每行的第几个匹配字段将要被替换
file_name
表示待处理的文本路径
例如,将上述文本中的每行的第2个his
替换成my
,命令如下: sed -i 's/his/my/2' pet.txt
结果如下:
This is my cat, his cat's name is betty
This is my dog, his dog's name is frank
This is my fish, his fish's name is george
This is my goat, his goat's name is adam
注意: 上述文本中
This
也是his
的匹配规则中的。
语法格式为: sed -i 's/pattern/replace/ng' file_name
Notes:
pattern
表示待匹配的字符字段
replace
表示要替换成的字符字段
n
表示从第几列开始,替换匹配的字段
file_name
表示待处理的文本路径
例如,将上述文本中的每行的his
,从第2个开始,全部替换成my
,命令如下: sed -i 's/his/my/2g' pet.txt
结果如下:
This is my cat, my cat's name is betty
This is my dog, my dog's name is frank
This is my fish, my fish's name is george
This is my goat, my goat's name is adam
语法格式为: sed -i '[m,n]s/pattern1/replace1/[n]g; [m,n]s/pattern2/replace2/[n]g' file_name
Tips: 多个匹配规则之间用分号(
;
)隔开即可
例如,原文本内容如下:
This is his cat, his cat's name is betty
This is his dog, his dog's name is frank
This is his fish, his fish's name is george
This is his goat, his goat's name is adam
现将前两行中的his
,从第2个开始,全部替换成my
;
从第3行开始,将所有的This
全部替换成That
。命令如下:
sed -i '1,2s/his/my/2g; 3,$s/This/That/g' pet.txt
结果为:
This is my cat, my cat's name is betty
This is my dog, my dog's name is frank
That is his fish, his fish's name is george
That is his goat, his goat's name is adam
说明:上述的命令等价于:
sed -i -e '1,2s/his/my/2g' -e '3,$s/This/That/g' pet.txt
语法格式为: sed 's/context\(pattern\)/\1/g' file_name