sed - 在纯文本文件的每 4 行后插入一个逗号

标签 sed awk

我正在尝试使用 sed 在第 1、4、8 行等的值之后插入一个逗号,

sed '0-4 s/$/,/' in.txt > in2.txt

出于某种原因,这不起作用,所以我想知道是否有人有使用 awk、sed 或任何其他方法执行此操作的任何解决方案。

我得到的错误是

sed: 1: "0-4 s/$/,/": invalid command code -

目前我的数据是这样的:

        City
        Address
        Zip Code
        County

我试着把它格式化成这样

        City,
        Address
        Zip Code
        County

非常感谢。

最佳答案

0-4 确实不是格式正确的 sed 语法。我会为此使用 awk,但使用任何一种都很容易。

sed 's/$/,/;n;n;n' file

替换一行并打印它,然后不替换地打印接下来的三行,然后从脚本的开头重新开始;或

awk 'NR % 4 == 1 {sub(/$/,",")} {print}'

如果行号模 4 为 1,则执行替换,然后无条件打印。

Sed 的寻址模式有时有点令人失望;没有标准的方法来计算线偏移,相对或引用例如。文件的结尾。当然,awk 更复杂,但如果您只能学习其中之一,那么一定要选择 awk。 (或者在当今时代,Python 或 Perl——更好的投资。)

关于sed - 在纯文本文件的每 4 行后插入一个逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7158875/

相关文章:

bash - 删除 HTML anchor 标记,但保留 bash 命令行中的 anchor 文本

python - 更改标签之间的文本 - shell 脚本

bash - 如何将一个文件的列添加到另一个文件

awk 搜索字符串并设置退出代码(如果存在)

bash - 如何删除反向 grep 匹配上方和下方的行?

regex - sed:用 Camel:Case 替换 CamelCase

bash - 删除所有以小写字符开头的行

awk - sed 或 awk : group by paragraphs consisting of 2nd upto n+1th lines of each paragraph

algorithm - sed优化(基于较小数据集的大文件修改)

shell - 在 bash 中将文本从 HttpStatus.NOT_FOUND 转换为 status().isNotFound()