问题标签 [gnu-sed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
47 浏览

xml - 如何将文件的多行内容放在在 XML 文件中使用 sed/awk?

我有这个文件:

我想把它改成——

我用过这个,它可以替换之间<theme> </theme>的所有内容SOMETEXT

但我想用第二个文件的内容替换 SOMETEXT 。我怎样才能做到这一点?

0 投票
5 回答
70 浏览

bash - 使用 sed 查找和替换多行字符串

我有一个包含以下数字的输入文件

我有一个目标 txt 文件

使用 sed 我想用输入文件中的第一个条目替换目标文件中 Angle 条目的第一个实例,用输入文件的第二个条目替换 Angle 的第二个条目,依此类推......

预期输出:

这是我设法写的,但我没有得到预期的输出

你能帮我改进剧本吗?

谢谢!

0 投票
3 回答
98 浏览

awk - 根据公共字符串的出现重新索引两位数字字符串

我有一个urlwatch .yaml具有这种格式的文件:

我需要根据name: . 在此示例中,第一次和第二次出现的name: 后面是正确的索引号,但第三次和第四次不是。

在上面的示例中,第三次和第四次出现的name: 索引号将重新索引到03_文本04_字符串之前。即:一个两位数的索引号和一个下划线。

此外,此字符串的某些实例#name: 不应计入重新索引。(它们已被注释掉,因此这些行不会被 执行urlwatch

我尝试使用 sed 但无法根据字符串的出现生成索引号。我没有 GNU sed,但如果这是唯一的方法,我可以安装。

0 投票
1 回答
114 浏览

windows - 仅替换字符串中管道字符的第一次出现

我需要在带有 sed 的管道分隔的 csv 文件的标题行末尾删除一个额外的管道字符。我要查找的文字字符串是 COLNAME|

在 GCP Windows 服务器上工作。我正在尝试使用的命令:

"C:\Program Files (x86)\GnuWin32\bin\sed.exe" sed '0,/COLNAME"|"/s//COLNAME/' 文件名

返回输出... sed.exe: -e expression #1, char 3: unterminated `s' command

我是 sed 的新手,并且一直在使用 s 命令一段时间,但似乎无法获得正确的语法。

关于如何做到这一点的任何建议?

0 投票
2 回答
31 浏览

macos - 如何在文件中的任何 `{` 和 `:` 字符中添加换行符

我想将给定的文本文件(通常在 macOS 或 Unix 上)复制到标准输出,其中任何{:字符都添加了换行符。

我试过

仅用于大括号字符,但这似乎不起作用。

我需要为此安装 sed 的 GNU 版本吗?如果是这样,我怎样才能一次性为两个字符添加 {换行符:

0 投票
0 回答
28 浏览

centos - 使用 sed 删除 nginx 配置位置部分

在我的大多数 nginx 配置文件中,我有以下几行:

如果存在,我想删除以下块:

使用 regex101.com 我想出了以下正则表达式来“匹配”该块:

regex101 代码生成器生成以下代码:

但它不会产生任何输出。

如果我想在给定的配置文件中删除该配置部分,我该如何实现这一点,比如说 name myhost.localhost.conf

sed 版本:

sed (GNU sed) 4.2.2

0 投票
1 回答
55 浏览

sed - -i 不带参数:是 GNU sed --posix 选项被窃听还是 BSD sed 不符合 POSIX?

这主要是这里出现的一个好奇问题。

从 GNU sed 4.8 的手册页我读到

所以我明白,如果像下面这样的代码有效,这意味着POSIX 允许-i 没有参数:

另一方面,相同的代码(带有或不带有--posix)对于 MacOS 的 BSD sed 不起作用,因为该版本需要-i后跟一个参数。

我只能看到两种相互排斥的可能性:

  • GNU sed 的--posix选项允许的不仅仅是 POSIX,这意味着它存在错误并需要错误报告
  • BSD sed 不符合 POSIX。

真相是什么?

0 投票
2 回答
75 浏览

windows - GNU sed 4.2.1 匹配第二次出现

使用此命令,我试图在 M502 的两个模式和 M502 之后的第二行之间插入 M09,看起来像 X41.5Y251.5T201。

具体来说,我试图在最后一行之前插入 M09。

结果:

应该:

我正在尝试将最后一行与 匹配\(.*\)T\([0-9]\+\),但这会选择第二行。如何让 sed 忽略此表达式的第一个匹配项?

我强调我可能有数量不足的此类文本块,我需要为每个文本块插入 M09。

0 投票
1 回答
72 浏览

xml - 如何使用 sed 从块中删除重复的行

假设我们有一个行块,如下所示:

例如,这里的段 2 有需要删除的重复项(排序在这里无关紧要)。那么现在如何绑定 sed 以仅从段 2 中删除重复项。在此示例中,片段 2 是第二个片段,可能并非所有可能出现的情况都是如此,因为它也可能是子集的子集。

我对此的想法是使用标签,从命令开始和结束gsed -ni 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'

0 投票
1 回答
59 浏览

windows - 在每个多行范围之前插入带有 SED 的行

如何在每个多行范围块之前插入一行并在 Windows 上的 gnu sed 中缩进块?这些文件包含许多以 ``` 开头和结尾的不同长度的代码块。使用单线模式对许多类似问题的答案不使用范围。有两个类似的问题:在文本范围下方插入行 sedsed: Appending after a block

此代码根据需要缩进所有代码块:

sed '/```/,/```$/ s/\(.*\)/ \1/' test.md

我不明白如何===在每个代码块之前插入行,但我知道{}在插入行后处理块需要分组。上面的问题似乎更复杂,需要缓冲区,但这个文件应该能够在没有缓冲区的情况下按顺序处理。

我希望这样的尝试应该与组之前的换行细节一起使用:

sed '/```/,/```$/ {s/\(.*\)/ \1/}' test.md

测试.md

必需的