问题标签 [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 回答
238 浏览

sed - 如何在不使用 sed 在保持空间中插入新行的情况下从模式空间追加到保持空间?

sed 命令 'H' 在先将新行附加到保持空间后,从模式空间附加到保持空间。

如何在不将新行插入保持空间的情况下追加?

0 投票
2 回答
200 浏览

regex - 哪些字符与 ^ 组合不需要在 sed 中转义?

我已经检查^*并匹配以and^&开头的行,因为它们是特殊字符,所以我没有。但不起作用。这是“标准”行为吗?这背后有什么理由吗?*&^[

sed使用的版本是“GNU sed 4.4”。

0 投票
1 回答
60 浏览

bash - 将行格式化为 CSV 条目并使用 sed 对其执行转换

当我尝试 grep 某些东西时,我得到:

() 中的值是百分比,所以总是位于 [0, 100]

所以输入格式总是这样的:

假设日期是 20181025。

是否可以使用 awk/其他 unix 命令将此 grep 结果转换为类似时间序列的 csv 格式:

  • 保证数字始终为 4 位数字。

谢谢!

0 投票
1 回答
145 浏览

sed - “sed”中的范围运算符实际上是做什么的,它在 GNU/busybox 中被破坏了吗?

我想知道“sed”的 GNU 和 BusyBox 实现是否可能被破坏。

我的默认 sed 实现是来自 GNU 的。

POSIX 说:

具有两个地址的编辑命令应选择从与第一个地址匹配的第一个模式空间到与第二个地址匹配的下一个模式空间的包含范围。

但那为什么给

代替

? 显然,这里的第二个“ha”是匹配的“下一个”模式空间,所以它也应该被输出!

但更奇怪的是,

根本不输出任何东西!

但是,即使 sed 会按照 POSIX 定义所说的那样做,当实际检查范围表达式时应该发生什么仍然不清楚。

每个范围条件都有自己的内部状态吗?还是 sed 脚本中的所有范围条件都有一个全局状态?

显然,一个范围条件至少需要记住它当前是处于“搜索第一个地址的匹配”状态还是“搜索第二个地址的匹配”状态。也许它甚至需要记住第三种状态“我已经处理了范围,无论如何都不会再次匹配”。

更新这些条件当然很重要:每次读取新的模式空间?每次修改模式空间时,比如通过 s 命令?或者只是当控制流达到一个范围条件?

那么,它是什么?

在我知道得更清楚之前,我会避免在我的 sed 脚本中使用范围条件,并认为它们是一个可疑的功能。

0 投票
1 回答
100 浏览

linux - 如何结束 GNU sed 中的“i”命令?

我正在尝试使用sed对输入字符串进行多次替换和插入。

但是,我最近注意到插入命令i不会;像其他命令一样终止,而是打印字符串的其余部分。

在以下输入上运行该命令时,

我得到以下不正确的输出。

终止该命令的正确方法是什么?

0 投票
1 回答
100 浏览

bash - 使用 GNU sed (gsed) “查找”的 Bash 脚本的输出文件为空

我有很多文件,每个文件都在一个目录中。我的脚本应该:

  • 在文件中查找字符串。假设文件名为“results”,字符串为“average”。

  • 然后将字符串行上的所有其他内容附加到另一个名为“allResults”的文件中。运行脚本后,文件“allResults”应包含与“结果”文件一样多的行,例如

allResults.txt(我想要的):

我的脚本可以找到我需要的东西。当脚本正在运行时,我通过在“allResults.txt”上执行“cat”并在“allResults.txt”的父目录上执行“ls -l”来检查。即,我可以在屏幕上看到“查找”的输出,并且“allResults.txt”的大小会短暂增加,然后回到0。问题是脚本完成后“allResults.txt”为空。因此“查找”的结果不会被附加/添加到“allResults.txt”中。它们正在被覆盖。这是我的脚本(我使用“gsed”,GNU sed,因为我是 Mac OSX Sierra 用户):

请注意,我在这里的示例中使用了“>>”,因为我读到它附加了(这是我想要的 - 与所有文件中的“查找”匹配的所有行的列表),而“>”会覆盖。但是,在这两种情况下(当我使用“>”或“>>”时),我最终都会得到一个空allResults.txt文件。

0 投票
2 回答
32 浏览

sed - 为什么选项卡不会插入到添加的第一行?

我正在尝试向文件中添加多行,所有行都带有一个制表符。匹配字符串后,应在第一行插入这些行。

假设一个文件只有一行,名为“my-file.txt”,如下所示:

我尝试了以下 sed 命令:

这会产生以下输出:

请注意应该在第一(插入)行上的选项卡是如何被省略的。相反,它会打印一个额外的前导“t”。

为什么?以及如何按预期更改命令以在第一行打印选项卡?

0 投票
1 回答
124 浏览

regex - 具有相同起始位置的相同长度正则表达式替代方案的决胜局

使用 GNU sed(-r为了清楚起见,带有标志),输入字符串上的以下两个替换ab给出了相同的结果:

都给ba。看起来替代品(.)(.)(没有的替代品$)在两种替换中都成功了,无论其位置是第一个替代品还是第二个替代品。为什么会这样?这种替代方案的决胜局是什么?


正则表达式的 POSIX 规范指定1当备选方案从不同位置开始时(在这种情况下优先选择较早的位置),以及当它们从相同位置开始但具有不同长度(优先选择较长的位置)时,决胜局,但是当两个备选方案从相同位置开始并具有相同长度时,它似乎没有指定捕获组的行为,因此将其留给具体实现。

匹配序列的搜索从字符串的开头开始,并在找到与表达式匹配的第一个序列时停止,其中“first”定义为“在字符串中最早开始”。如果模式允许可变数量的匹配字符,因此从该点开始有多个这样的序列,则匹配最长的这样的序列。[...] – The Open Group Base Specifications 第 7 期,2018 年版

这是该现象的一个运行示例。

在线尝试!

0 投票
2 回答
40 浏览

sed - 具有多个脚本的 GNU sed 和换行符

假设我们从这个字符串开始:

并希望得到这个结果:



为什么会这样:

但不是这个:



第二个命令产生了这个,显然在寻找每行上第一次出现的 ':' 时忽略了新的换行符。

使用输入的扩展版本:

我想得到这个结果:

0 投票
1 回答
105 浏览

sed - 使用 sed 混合大小写标签

尝试在 win10 上使用 gnu sed v4.7 重新格式化 xlm 文件中的标签(射击我)。sed位于路径中并从命令提示符运行。需要使用 . 转义一些 Windows 命令行字符^

源文件

(行首有三个空格。)

预期输出:

我想要标题大小写,但这确实是小写:

sed -i 's/^<trn:description^>\(.*\)^<\/trn:description^>$/^<trn:description^>\L\1^<\/trn:description^>/g' sourcefile

此命令更改为 Title Case

sed 's/.*/\L^&/; s/\w*/\u^&/g' sourcefile

这可以作为一个单一的线组合在一起以就地编辑原始源文件吗?


我想使用 sed,因为它在系统上可用并且代码结构一致。我知道我应该使用像 xmlstarlet 这样的工具,如下所述:

sed ... 代码无法区分谈论 sessionId 标签和真实 sessionId 标签的评论;无法识别元素编码;无法处理标签上出现的意外属性;等等