标签: sed

如何替换文件中的字符串?

根据某些搜索条件替换文件中的字符串是一项非常常见的任务。我怎样才能

  • 替换字符串foobar在当前目录下的所有文件?
  • 对子目录递归执行相同的操作吗?
  • 仅当文件名匹配另一个字符串时才替换?
  • 仅当在特定上下文中找到字符串时才替换?
  • 替换字符串是否在某个行号上?
  • 用相同的替换替换多个字符串
  • 用不同的替换替换多个字符串

sed awk perl text-processing

879
推荐指数
8
解决办法
171万
查看次数

使用“sed”查找和替换

我知道这个问题以前可能已经回答过。我在不同的地方看到了很多关于这个的话题,但对我来说通常很难提取答案。我正在寻找有关“sed”命令的示例用法的帮助。

假设我想对文件“hello.txt”(在与提示相同的目录中)进行操作。任何包含“很少”一词的地方,都应改为“asd”。命令会是什么样的?

sed shell-script text-processing

392
推荐指数
2
解决办法
176万
查看次数

如何使用 sed 替换多行字符串?

我注意到,如果我添加\n到一个模式来替换 using 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
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用?

sed utilities regular-expression

353
推荐指数
10
解决办法
45万
查看次数

在 sh 脚本中使用 sed 时需要转义哪些字符?

执行以下脚本:

#!/bin/sh
sed 's/(127\.0\.1\.1)\s/\1/' [some file]
Run Code Online (Sandbox Code Playgroud)

如果我尝试在sh( dashhere) 中运行它,它会因为需要转义的括号而失败。但是,我并不需要转义反斜线本身(八位位组之间,或\s\1)。这里的规则是什么?当我需要使用{...}或 时[...]呢?有没有我做什么和不需要逃避的清单?

sed shell-script quoting

346
推荐指数
3
解决办法
56万
查看次数

<<<是什么意思?

<<<是什么意思?下面是一个例子:

$ sed 's/a/b/g' <<< "aaa"
bbb
Run Code Online (Sandbox Code Playgroud)

它是否适用于更多 Linux 命令?

看起来它正在为sed程序提供 string aaa,但通常不用于 << 或 < 吗?

command-line bash sed command

176
推荐指数
4
解决办法
16万
查看次数

仅返回匹配模式后的一行部分

因此,当我使用我正在处理的特定日志集时,拉开一个文件cat然后使用它grep来获取匹配的行只会让我走到这一步。它需要一种将行与模式匹配的方法,但仅在匹配后返回行的部分。比赛前后的部分将始终不同。我玩过使用sedor 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 }
Run Code Online (Sandbox Code Playgroud)

我需要的部分是“停滞”后的一切。

这背后的背景是我可以找出某些东西停顿的频率:

cat messages | grep stalled | wc -l
Run Code Online (Sandbox Code Playgroud)

我需要做的是找出某个节点停顿了多少次(由“停顿”之后每个冒号之前的部分表示。如果我只是为此(即 20 :)grep,它可能会返回软失败的行,但是没有停顿,这对我没有帮助。我只需要过滤停顿的部分,这样我就可以从那些停顿的节点中搜索特定节点。

出于所有意图和目的,这是一个带有标准 GNU 核心实用程序的 freebsd 系统,但我无法安装任何额外的东西来提供帮助。

grep sed text-processing

161
推荐指数
3
解决办法
57万
查看次数

使用 sed 查找和替换复杂字符串(最好使用正则表达式)

我有一个包含以下内容的文件:

<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
Run Code Online (Sandbox Code Playgroud)

我需要制作一个脚本,将第一行中的“name”更改为“something”,将第二行中的“password”更改为“somethingelse”,将第三行中的“name”更改为“somethingdifferent”。我不能依赖这些在文件中出现的顺序,所以我不能简单地用“something”替换第一次出现的“name”,用“somethingdifferent”替换第二次出现的“name”。我实际上需要搜索周围的字符串,以确保我找到并替换了正确的东西。

到目前为止,我已尝试使用此命令来查找和替换第一个“名称”出现:

sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
Run Code Online (Sandbox Code Playgroud)

但是它不起作用所以我认为其中一些字符可能需要转义等。

理想情况下,我希望能够使用正则表达式来匹配两个“用户名”出现并仅替换“名称”。像这样的东西,但有sed

<username>.+?(name).+?</username>
Run Code Online (Sandbox Code Playgroud)

并将括号中的内容替换为“某物”。

这可能吗?

sed quoting regular-expression

159
推荐指数
5
解决办法
51万
查看次数

删除文件的第一行

如何删除文件的第一行并保留更改?

我试过这个,但它删除了文件的全部内容。

$sed 1d file.txt > file.txt
Run Code Online (Sandbox Code Playgroud)

ksh sed shell-script

150
推荐指数
6
解决办法
42万
查看次数

解码URL编码(百分比编码)

我想解码 URL 编码,是否有任何内置工具可以执行此操作,或者谁能为我提供sed可以执行此操作的代码?

我确实通过unix.stackexchange.com和互联网进行了一些搜索,但我找不到任何用于解码 url 编码的命令行工具。

我想要做的只是就地编辑txt文件,以便:

  • %21 变成 !
  • %23 变成 #
  • %24 变成 $
  • %26 变成 &
  • %27 变成 '
  • %28 变成 (
  • %29 变成 )

等等。

url sed shell-script text-processing

132
推荐指数
9
解决办法
13万
查看次数

在一个巨大的 (70GB)、一行、文本文件中替换字符串

我有一个巨大的(70GB)一行文本文件,我想替换其中的一个字符串(令牌)。我想<unk>用另一个虚拟令牌(手套问题)替换令牌。

我试过sed

sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
Run Code Online (Sandbox Code Playgroud)

但输出文件corpus.txt.new有零字节!

我也尝试过使用 perl:

perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
Run Code Online (Sandbox Code Playgroud)

但我遇到了内存不足错误。

对于较小的文件,上述两个命令都有效。

如何替换字符串是这样的文件? 是一个相关的问题,但没有一个答案对我有用。

编辑:如何将文件拆分为 10GB(或其他任何大小)的块并应用sed到其中的每一个然后将它们合并cat?那有意义吗?有没有更优雅的解决方案?

sed large-files text-processing

129
推荐指数
11
解决办法
3万
查看次数