Bash 在行的末尾添加sed

Bash 在行的末尾添加sed,bash,sed,Bash,Sed,给定一个包含以下几行的纯文本文档: c48 7.587 7.39 c49 7.508 7.345983 c50 5.8 7.543 c51 8.37454546 7.34 我需要在行结束后添加一些info 2空格,因此对于每行,我将得到: c48 7.587 7.39 def c49 7.508 7.345983 def c50 5.8 7.543 def c51 8.37454546 7.34 def 我需要为数千个文件执行此操作。我想这可能与sed有关,但不知道如何进行。有什么提

给定一个包含以下几行的纯文本文档:

c48 7.587 7.39
c49 7.508 7.345983
c50 5.8 7.543
c51 8.37454546 7.34
我需要在行结束后添加一些info 2空格,因此对于每行,我将得到:

c48 7.587 7.39  def
c49 7.508 7.345983  def
c50 5.8 7.543  def
c51 8.37454546 7.34  def
我需要为数千个文件执行此操作。我想这可能与sed有关,但不知道如何进行。有什么提示吗?你能给我一些关于这个案例的教程或表格链接吗

谢谢

这里的关键是搜索和替换
s//
命令。在这里,我们用2个空格和字符串替换
$
行的末尾


如果所有文件都在一个目录中,请在

找到sed文档

sed -i.bak 's/$/  def/' *.txt
递归执行(GNU查找)

您可以查看sed的介绍

您可以使用的其他方法

awk

炮弹

for file in *
do
  while read -r line
  do
      echo "$line def"
  done < $file >temp
  mv temp $file
done
中的文件的
*
做
而read-r行
做
回显“$line def”
完成<$file>temp
mv temp$文件
完成

什么是
+?我总是使用
\。bash手册页并没有让我变得更聪明。它在GNU
find的手册页中。它相当于
xargs
hi,awk的很不错。只是一个简短的问题,如何将awk'{print$0“def”}'$file>temp应用于文件的具体行号?@werner,对于行号,也称为记录号,请使用
NR
,例如
awk'NR==3{..}文件
意味着我在做第一个选项时对第3行执行操作,但由于某种原因,它使用20个空格而不是2+“def”将空格放在下一行。不过,您的awk解决方案非常有效!非常感谢你。只有一个问题,在OSX上执行此操作时,为什么会出现“^M”字符?IIRC,Unix、Mac和Windows中的行尾-下线结束字符都是不同的
sed
是一个Unix实用程序,因此它使用Unix约定,即以回车符-CR(^M)结束每一行,而Mac使用换行符-LF(^L),Windows BTW使用回车符-CR,LF。重点是您只剩下Unix EOL字符。我不是Mac专家,但应该有一个工具来解决这个问题。在我的Linux机器上有
dos2unix
unix2dos
,但是如果你找不到这样的工具,试着用
tr'\r'\f'
来获得类似的效果。注意,Mac一直使用CR(^M)('\r'),直到OSX,这时他们切换到LF(^L)('\n')。UNIX始终使用LF(^L)。您所说的Windows使用CRLF(^M^L)(“\r\n”)是正确的。
find /path -type f -iname '*.txt' -exec sed -i.bak 's/$/  def/' "{}" +;
for file in *
do
  awk '{print $0" def"}' $file >temp
  mv temp "$file"
done 
for file in *
do
  while read -r line
  do
      echo "$line def"
  done < $file >temp
  mv temp $file
done