如何在文件中每一行的开头添加一个字符串?

新手上路,请多包涵

我有以下 bash 代码,它逐行循环遍历文本文件..我试图为每一行添加前缀工作“前缀”,但收到此错误:

 rob@laptop:~/Desktop$ ./appendToFile.sh stusers.txt kp
stusers.txt
kp
./appendToFile.sh: line 11: /bin/sed: Argument list too long
115000_210org@house.com,passw0rd

这是bash脚本..

 #!/bin/bash

file=$1
string=$2

echo "$file"
echo "$string"

for line in `cat $file`
do
    sed -e 's/^/prefix/' $line
    echo "$line"
done < $file

我在这里做错了什么?

更新:执行文件头将所有行转储到终端的一行,可能相关?

 rob@laptop:~/Desktop$ head stusers.txt
rob@laptop:~/Desktop$ ouse.com,passw0rd

原文由 bobbyrne01 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 769
2 个回答

单行 awk 命令也可以解决问题:

 awk '{print "prefix" $0}' file

原文由 nullrevolution 发布,翻译遵循 CC BY-SA 3.0 许可协议

关于您的原始错误:

./appendToFile.sh:第 11 行:/bin/sed:参数列表太长

问题在于这行代码:

 sed -e 's/^/prefix/' $line

$line 在这种情况下是 sed 运行的 文件名。要更正您的代码,您应该这样修复这一行:

 echo $line | sed -e 's/^/prefix/'

(另请注意,您的原始代码末尾不应有 < $file 。)

William Pursell 在他的两个建议中都正确地解决了这个问题。

但是,我相信您已经正确识别出您的原始文本文件存在问题。 dos2unix 不会纠正这个问题,因为它只会去掉行尾的回车符 Windows 键。 (但是,如果您尝试在 Windows 中读取 Linux 文件,您会得到一个没有返回的庞大行。)

假设文本文件中的行尾字符不是问题,William Pursell、Andy Lester 或 nullrevolution 的答案将起作用。

while read... 建议的变体:

 while read -r line; do  echo "PREFIX " $line; done < $file

这可以直接从 shell 运行(不需要批处理/脚本文件):

 while read -r line; do echo "kp" $line; done < stusers.txt

原文由 Nick Petersen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题