我有一个文件如下:
line1
line2
line3
我想要得到:
prefixline1
prefixline2
prefixline3
我可以编写Ruby脚本,但如果我不需要这样做会更好。
前缀将包含/。为路径,例如“/opt/workdir/”。
我有一个文件如下:
line1
line2
line3
我想要得到:
prefixline1
prefixline2
prefixline3
我可以编写Ruby脚本,但如果我不需要这样做会更好。
前缀将包含/。为路径,例如“/opt/workdir/”。
当前回答
下面是一个使用moreutils的ts命令的高可读性的联机解决方案
$ cat file | ts prefix | tr -d ' '
以及它是如何一步步推导出来的:
# Step 0. create the file
$ cat file
line1
line2
line3
# Step 1. add prefix to the beginning of each line
$ cat file | ts prefix
prefix line1
prefix line2
prefix line3
# Step 2. remove spaces in the middle
$ cat file | ts prefix | tr -d ' '
prefixline1
prefixline2
prefixline3
其他回答
如果你的前缀有点复杂,就把它放在一个变量中:
prefix=path/to/file/
然后,你传递这个变量,让awk来处理它:
awk -v prefix="$prefix" '{print prefix $0}' input_file.txt
在bash的命令行上使用for循环的简单解决方案:
for i in $(cat yourfile.txt); do echo "prefix$i"; done
将输出保存到一个文件:
for i in $(cat yourfile.txt); do echo "prefix$i"; done > yourfilewithprefixes.txt
如果您需要在每行具有特定字符串的开头预先添加文本,请尝试以下操作。在下面的例子中,我在每一行有“rock”的行开始添加#。
sed -i -e 's/^.*rock.*/#&/' file_name
使用&(与模式"匹配的整个输入部分):
cat in.txt | sed -e "s/.*/prefix&/" > out.txt
或者使用反向引用:
cat in.txt | sed -e "s/\(.*\)/prefix\1/" > out.txt
你可以在Ex模式下使用Vim:
ex -sc '%s/^/prefix/|x' file
%选择所有行 年代取代 保存并关闭