sed简明用法 博客分类: linux sed
程序员文章站
2024-03-14 22:43:59
...
本文旨在帮助sed新手快速熟悉sed的常见用法。
首先,用如下文件作为源文件pets.txt:
替换命令s
把文本中所有的my替换为your:(其中s代表替换命令,g代表全行替换)
把文本中的第1行my替换为your:
把文本中的第1~3行my替换为your:
替换每一行的第1个my
替换每一行的第2个my
替换每一行的第3个my以及之后的
在pets1.txt的每一行的开头加上#
在pets2.txt的每一行的结尾加上----
在上面的两个例子中,^代表每行的开头,$代表每行的结尾,顺便说下正则表达式的一些最基本的东西:
正则表达式是很牛逼的,比如test.html:
要去掉其中的标签:(其中[^>]*表示0个或者多个非>字符)
预取命令N
将文本pets.txt的偶数行加到奇数行后面:
输出结果是酱紫的:
使用圆括号匹配的示例:(圆括号括起来的正则表达式所匹配的字符串可以当成变量来使用,sed中使用的是\1,\2…)
比如:
结果如下:
关于这条命令需要介绍一下,[^,]*表示0个或者多个非逗号字符,.*表示0个或多个任意字符。用括号来表示括号匹配,需要用转义字符\
插入命令i和a
以mypets.txt为例,在第一行之前插入一行:
以mypets.txt为例,在第一行之后插入一行:
我们可以运用匹配来添加文本,再dog后面插入一行:
整行替换命令c
以mypets.txt为例,将第二行替换:
将dog所在行替换
整行删除命令c
以mypets.txt为例,将第二行删除:
以mypets.txt为例,将dog所在行替换:
以mypets.txt为例,将第二行以及以后所有行删除:
整行打印命令p
找出/etc/passwd中包含root的行:
另外补充一点,覆盖原来的文件使用 -i,例子:
覆盖原来的文件的写法为:
以上内容转发整理自http://coolshell.cn/articles/9104.html#more-9104
grep,sed,awk并成为linux三剑客,他们三个正好是一套处理字符的流程,grep用于查找目标字符,sed用于编辑字符,awk用于选择和分析字符。
首先,用如下文件作为源文件pets.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
替换命令s
把文本中所有的my替换为your:(其中s代表替换命令,g代表全行替换)
$cat pets.txt | sed 's/my/your/g' >> pets1.txt
把文本中的第1行my替换为your:
$cat pets.txt | sed '1s/my/your/g' >> pets1.txt
把文本中的第1~3行my替换为your:
$cat pets.txt | sed '1,3s/my/your/g' >> pets1.txt
替换每一行的第1个my
$cat pets.txt | sed 's/my/your/1' >> pets1.txt
替换每一行的第2个my
$cat pets.txt | sed 's/my/your/2' >> pets1.txt
替换每一行的第3个my以及之后的
$cat pets.txt | sed 's/my/your/3g' >> pets1.txt
在pets1.txt的每一行的开头加上#
cat pets1.txt | sed 's/^/#/g' >> pets2.txt
在pets2.txt的每一行的结尾加上----
cat pets2.txt | sed 's/$/----/g' >> pets3.txt
在上面的两个例子中,^代表每行的开头,$代表每行的结尾,顺便说下正则表达式的一些最基本的东西:
^ 表示一行的开头。如:/^#/ 以#开头的匹配。 $ 表示一行的结尾。如:/}$/ 以}结尾的匹配。 \< 表示词首。 如 \<abc 表示以 abc 为首的詞。 \> 表示词尾。 如 abc\> 表示以 abc 結尾的詞。 . 表示任何单个字符。 * 表示某个字符出现了0次或多次。 [ ] 字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符
正则表达式是很牛逼的,比如test.html:
<b>This</b> is what <span style="text-decoration: underline;">I</span> meant.
要去掉其中的标签:(其中[^>]*表示0个或者多个非>字符)
cat test.html | sed 's/<[^>]*>//g'
预取命令N
将文本pets.txt的偶数行加到奇数行后面:
cat pets.txt | sed 'N; s/\n/,/g' >> mypets.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中使用的是\1,\2…)
比如:
cat mypets.txt | sed 's/This is my \([^,]*\), my .* \(.*\)/\1:\2/g'
结果如下:
cat:betty dog:frank fish:george goat:adam
关于这条命令需要介绍一下,[^,]*表示0个或者多个非逗号字符,.*表示0个或多个任意字符。用括号来表示括号匹配,需要用转义字符\
插入命令i和a
以mypets.txt为例,在第一行之前插入一行:
cat mypets.txt | sed "1i This is my pig, my pig's name is bajie"
以mypets.txt为例,在第一行之后插入一行:
cat mypets.txt | sed "1a This is my pig, my pig's name is bajie"
我们可以运用匹配来添加文本,再dog后面插入一行:
cat mypets.txt | sed "/dog/a This is my pig, my pig's name is bajie"
整行替换命令c
以mypets.txt为例,将第二行替换:
cat mypets.txt | sed "2c This is my pig, my pig's name is bajie"
将dog所在行替换
cat mypets.txt | sed "/dog/c This is my pig, my pig's name is bajie"
整行删除命令c
以mypets.txt为例,将第二行删除:
cat mypets.txt | sed '2d'
以mypets.txt为例,将dog所在行替换:
cat mypets.txt | sed '/dog/d'
以mypets.txt为例,将第二行以及以后所有行删除:
cat mypets.txt | sed '2,$d'
整行打印命令p
找出/etc/passwd中包含root的行:
cat /etc/passwd | sed -n '/root/p' 上面的命令等价于 grep 'root' /etc/passwd
另外补充一点,覆盖原来的文件使用 -i,例子:
$cat pets.txt | sed 's/my/your/g' >> pets1.txt
覆盖原来的文件的写法为:
sed -i 's/my/your/g' pets.txt
以上内容转发整理自http://coolshell.cn/articles/9104.html#more-9104
grep,sed,awk并成为linux三剑客,他们三个正好是一套处理字符的流程,grep用于查找目标字符,sed用于编辑字符,awk用于选择和分析字符。
推荐阅读
-
mac shell 博客分类: mac macsedmac sed
-
一分钟sed入门(一分钟系列) 博客分类: 工作之余 sed
-
linux中查看文件指定行的数据 博客分类: Unix linux查看文件指定行的数据sed
-
sed简明用法 博客分类: linux sed
-
sed 常见用法 博客分类: linux命令 sedsed常见用法
-
Shell的sed命令 博客分类: Linux Shellsed
-
linux sed查看指定行内容 博客分类: shell 指定行sed
-
sed替换^M为回车 博客分类: linux script sedMwindowslinux格式
-
sed常用经典案例 博客分类: linux script sed多行模式上一行下一行
-
sed用法统计 博客分类: 应用示例 sed