when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.
只是介绍一下 sed 用作文本替换时的常见做法
sed(stream editor) 的基本工作方式:
行为单位读取到内存(模式空间)每个脚本对该行进行操作以下的例子均使用下述测试文件 test.txt
1 | $ cat test.txt |
sed 的替换 s
基本用法:sed ‘s/old/new/’ filename
1 | $ sed 's/a/*/' test.txt # 单个替换命令 |
替换并写入文件:sed ‘s/old/new/’ -i filename
1 | $ sed 's/a/*/' -i test.txt |
结合正则表达式的替换:sed ‘s/正则表达式/new/’ filename 或 sed -E ‘s/扩展正则表达式/new/’ filename
1 | $ sed 's/[0-9]/*/' test.txt # 将数字替换为 * |
sed 的替换 s 结合标志位:s/old/new/标志位
标志位:数字或 g,指定行替换的范围
1 | $ sed 's/[a-d]/*/g' test.txt # g 为全行替换,将每一行所有属于 a-d 范围内的字符替换为 * |
标志位:p 打印替换后的内容
1 | $ sed 's/[a-d]/*/p' test.txt # 奇数行的输出是标准输出,sed 处理完默认会输出该行;偶数行则是 p 打印的输出,仅打印输出替换后的行 |
标志位:w 将替换后的内容写入文件
1 | $ sed 's/[a-d]/*/w test_w.txt' test.txt # 将每一行第一个属于 a-d 范围内的字符替换为 *,并写入 test_w.txt |
sed 的替换 s 学会寻址之后,即只对指定行操作,多条命令用 {}
正则寻址:sed ‘/正则表达式/s/old/new/’ filename
1 | $ sed '/[13]/s/[cx]/*/' test.txt # 找到存在 1 或 3 的行,将匹配行中的第一个 c 或第一个 x 替换为 * |
数字寻址:sed ‘数字s/old/new/’ filename
1 | $ sed '2s/[cx]/*/' test.txt # 将第二行中的第一个 c 或第一个 x 替换为 * |
范围寻址,可以是行号范围,可以是正则表达式匹配的范围,可以是混合的范围
1 | $ sed '/[1d]/,$s/[cx]/*/' test.txt # 从包含 1 或 d 的行开始,到最后一行,将范围内的行中第一个 c 或第一个 x 替换为 * |
特殊的范围寻址:m~n(m、n 均为数字)、m,+n(m 可以是数字可以是正则、n 为数字)、m,~n(m 可以是数字可以是正则、n 为数字)
1 | $ sed '1~2s/[cx]/*/' test.txt # 从第二行开始,每两行,将范围内的行中第一个 c 或第一个 x 替换为 * |
be yourself, everyone else is already taken.