@adonia
2016-11-02T03:20:20.000000Z
字数 5342
阅读 214
操作系统
需要向配置文件的末尾追加文本信息。例如:现有mysql的配置信息(/etc/mysql/my.cnf),内容如下:
[client]port = 3306socket = /var/run/mysqld/mysqld.sock[mysqld_safe]pid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.socknice = 0[mysqld]skip-host-cacheskip-name-resolveuser = mysqlpid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockport = 3306basedir = /usrdatadir = /var/lib/mysqltmpdir = /tmplc-messages-dir = /usr/share/mysqlexplicit_defaults_for_timestampsymbolic-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 = 3306socket = /var/run/mysqld/mysqld.sock[mysqld_safe]pid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.socknice = 0[mysqld]skip-host-cacheskip-name-resolveuser = mysqlpid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockport = 3306basedir = /usrdatadir = /var/lib/mysqltmpdir = /tmplc-messages-dir = /usr/share/mysqlexplicit_defaults_for_timestampsymbolic-links=0!includedir /etc/mysql/conf.d/
执行命令sed -i '/$/ac' /etc/sql/my.cnf后,文件内容如下:
[client]cport = 3306csocket = /var/run/mysqld/mysqld.sockcc[mysqld_safe]cpid-file = /var/run/mysqld/mysqld.pidcsocket = /var/run/mysqld/mysqld.sockcnice = 0cc[mysqld]cskip-host-cachecskip-name-resolvecuser = mysqlcpid-file = /var/run/mysqld/mysqld.pidcsocket = /var/run/mysqld/mysqld.sockcport = 3306cbasedir = /usrcdatadir = /var/lib/mysqlctmpdir = /tmpclc-messages-dir = /usr/share/mysqlcexplicit_defaults_for_timestampccsymbolic-links=0cc!includedir /etc/mysql/conf.d/csql_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 catmy cat's name is bettyThis is my dogmy dog's name is frankThis is my fishmy fish's name is georgeThis is my goatmy goat's name is adam
现要将文本中每行的my替换为his,命令如下:
sed -i 's/my/his/g' pet.txt
结果如下:
This is his cathis cat's name is bettyThis is his doghis dog's name is frankThis is his fishhis fish's name is georgeThis is his goathis 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 catline no: his cat's name is bettyline no: This is his dogline no: his dog's name is frankline no: This is his fishline no: his fish's name is georgeline no: This is his goatline 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 bettyThis is his dog, his dog's name is frankThis is his fish, his fish's name is georgeThis 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 bettyThis is his dog, his dog's name is frankTmy is my fish, my fish's name is georgeThis 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 bettyTmy is my dog, my dog's name is frankTmy is my fish, my fish's name is georgeTmy 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 bettyThis is my dog, his dog's name is frankThis is my fish, his fish's name is georgeThis 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 bettyThis is my dog, my dog's name is frankThis is my fish, my fish's name is georgeThis 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 bettyThis is his dog, his dog's name is frankThis is his fish, his fish's name is georgeThis 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 bettyThis is my dog, my dog's name is frankThat is his fish, his fish's name is georgeThat 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