Questions tagged «sed»

sed是用于过滤和转换文本的命令行流编辑器。

8
如何替换文件中的字符串?
根据某些搜索条件替换文件中的字符串是非常常见的任务。我怎样才能 替换字符串foo用bar在当前目录下的所有文件? 递归子目录是否一样? 仅在文件名匹配另一个字符串时才替换? 仅在特定上下文中找到字符串时才替换? 如果字符串在某个行号上,请替换? 用相同的替换替换多个字符串 用不同的替换项替换多个字符串
751 text-processing  awk  sed  perl 

3
在sh脚本中使用sed时,我需要转义哪些字符?
采取以下脚本: #!/bin/sh sed 's/(127\.0\.1\.1)\s/\1/' [some file] 如果我尝试在sh(dashhere)中运行此命令,它将由于括号而失败,该括号需要转义。但是,我并不需要转义反斜线本身(八位位组之间,或\s或\1)。这是什么规则?那我什么时候需要使用{...}或[...]呢?有我要做的和不需要逃避的工作的清单吗?

14
如何使用sed替换多行字符串?
我注意到,如果我添加\n了一个模式以替换使用sed,则该模式不匹配。例: $ cat > alpha.txt This is a test Please do not be alarmed $ sed -i'.original' 's/a test\nPlease do not/not a test\nBe/' alpha.txt $ diff alpha.txt{,.original} $ # No differences printed out 我该如何工作?

14
将字符串替换为一个巨大的(70GB)一行文本文件
我有一个巨大的(70GB),一行,文本文件,我想替换其中的一个字符串(令牌)。我想<unk>用另一个虚拟令牌替换该令牌(手套发行)。 我试过了sed: sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new 但是输出文件corpus.txt.new有零字节! 我也尝试使用perl: perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new 但是我遇到了内存不足的错误。 对于较小的文件,以上两个命令均有效。 如何替换这样的文件字符串? 这是一个相关的问题,但是没有一个答案对我有用。 编辑:将文件分成10GB(或其他大小)的块,然后分别应用于sed每个文件,然后与它们合并,该cat怎么办?那有意义吗?有没有更优雅的解决方案?


4
仅返回匹配模式后的行的一部分
因此,当我使用要处理的特定日志集时,仅cat使用拉开文件然后使用grep来获取匹配行就可以了。它需要一种将线与模式匹配的方法,但只需要在匹配后返回该线的一部分。比赛之前和之后的部分将不断变化。我使用过sed或awk,但无法弄清楚如何过滤线以删除比赛之前的部分,或者仅在比赛之后返回部分,这两种方法都可以使用。这是我需要过滤的一行示例: 2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 } 我需要的部分是“停顿”之后的所有内容。 其背后的背景是,我可以找出停顿的频率: cat messages | grep stalled | wc -l 我需要做的是找出某个节点已停顿了多少次(由“停顿”后每个冒号之前的部分指示。如果我只是为此而grep(即20 :),它可能会返回软失败的行,但是我只需要过滤停顿的部分,这样我就可以从停顿的那些节点中为特定节点进行grep。 出于所有目的和目的,这是一个具有标准GNU核心utils的freebsd系统,但是我无法安装任何额外的辅助工具。

13
解码URL编码(百分比编码)
我想解码URL编码,是否有任何内置工具可以执行此操作,或者有人可以为我提供sed执行此操作的代码吗? 我确实在unix.stackexchange.com和互联网上进行了一些搜索,但是找不到用于解码url编码的任何命令行工具。 我想做的就是简单地就地编辑txt文件,以便: %21 变成 ! %23 变成 # %24 变成 $ %26 变成 & %27 变成 ' %28 变成 ( %29 变成 ) 等等。

7
是否有针对grep,awk和sed的基本教程?[关闭]
我已经有一段时间使用Linux了,并且对大多数常见的命令行实用程序都有相当不错的了解。然而,那些上来,再次相对于编程是grep,awk和sed。 关于我使用grep的唯一一件事就是将内容传送到其中以在日志文件中查找文件,psetc 的输出。我没有使用过awk或根本没有使用sed过。这些实用程序有什么好的教程吗?
95 grep  sed  awk 

6
将文件内容转换为小写
我有temp一些小写和大写内容的文件。 输入值 我temp文件的内容: hi Jigar GANDHI jiga 我想将所有大写转换成小写。 命令 我尝试了以下命令: sed -e "s/[A-Z]/[a-z]/g" temp 但是输出错误。 输出量 我希望它是: hi jigar gandhi jiga 在论证的替代部分中需要做什么sed?

7
使用sed查找并替换复杂的字符串(最好使用正则表达式)
我有一个包含以下内容的文件: <username><![CDATA[name]]></username> <password><![CDATA[password]]></password> <dbname><![CDATA[name]]></dbname> 并且我需要制作一个脚本,将第一行中的“名称”更改为“ something”,第二行中的“密码”更改为“ somethingelse”,第三行中的“ name”更改为“ somethingdifferent”。我不能依靠它们在文件中出现的顺序,因此我不能简单地将“名称”的第一次出现替换为“某物”,并将第二次出现的“名称”替换为“某物”。我实际上需要搜索周围的字符串,以确保找到并替换了正确的东西。 到目前为止,我已经尝试过以下命令来查找和替换第一个“名称”出现的位置: sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml 但是它不起作用,所以我认为其中某些字符可能需要转义,等等。 理想情况下,我希望能够使用正则表达式来匹配两个“用户名”的出现并仅替换“名称”。像这样的东西,但是sed: <username>.+?(name).+?</username> 并用“ something”代替括号中的内容。 这可能吗?




5
删除包含某些字符串的行和以下行
我用这个 cat foo.txt | sed '/bar/d' 删除bar文件中包含字符串的行。 但是,我想删除这些行以及紧接其后的行。最好的sed,awk或者其他工具,在MINGW32的可用。 这是我可以grep使用的-A,-B打印匹配行以及匹配行之前/之后的行的一种反向方式。 有什么简单的方法可以实现吗?

6
如何使用sed剥离多个空格?
sed在AIX上没有按照我的想法去做。我正在尝试在IOSTAT的输出中用单个空格替换多个空格: # iostat System configuration: lcpu=4 drives=8 paths=2 vdisks=0 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.2 31.8 9.7 4.9 82.9 2.5 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk9 0.2 54.2 1.1 1073456960 436765896 hdisk7 0.2 54.1 1.1 1070600212 435678280 hdisk8 0.0 0.0 0.0 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.