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手册页并没有让我变得更聪明。它在GNUfind的手册页中。它相当于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