sed 在特定位置插入字符

dan*_*T_W 7 sed text-formatting

我有数百个*.txt具有通用格式的文件。

我可以在一个文件的特定位置插入一个逗号,如何概括以下代码以*.txt在目录中所有文件的多个位置应用此操作?

sed -i 's/^\(.\{4\}\)/\1,/' blank.txt
Run Code Online (Sandbox Code Playgroud)

例如在位置 4、8、22 等处插入逗号。

也许是这样的?

for i in *.txt; do
   sed -i 's/^\(.\{4\}\)/\1,/' $i
done
Run Code Online (Sandbox Code Playgroud)

mik*_*erv 9

一般的方式,你可以做:

sed 's/./&,/4' <in >out
Run Code Online (Sandbox Code Playgroud)

这会将输出中的逗号附加到所有输入行的第 4 个字符,至少有那么多字符。

而且,如果你接受我的建议,你通常应该使用-iswitch 到任何sed提供一个。

  • @Guss - 你描述得很好 - 虽然那不是唯一的方法。`-i` 不编辑文件而是替换它。对于多用户系统来说,这尤其是一个问题,因为与直觉相反,文件的权限并不重要,只有它的父目录的权限才重要。`-i` 改变元数据——甚至可能是所有权。你详述的 `mv file.new file.old` 命令正是 `sed` 所做的,只是它没有宣传这个事实,也没有遵守诸如 `$TMPDIR` 甚至 `~` 之类的规范,只是写入读取文件的父目录在它工作时,在退出时在读取文件上`mv`之前。 (2认同)

Sté*_*las 8

从最右边的开始:

sed -i 's/./&,/22;s/./&,/8;s/./&,/4' ./*.txt
Run Code Online (Sandbox Code Playgroud)

否则,第一个替换会影响第二个替换的偏移量。你总是可以解释它:

sed -i 's/./&,/4;s/./&,/9;s/./&,/24' ./*.txt
Run Code Online (Sandbox Code Playgroud)