我有一个文件如下:

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

其他回答

你可以用AWK来做

echo example| awk '{print "prefix"$0}'

or

awk '{print "prefix"$0}' file.txt > output.txt

对于后缀:awk '{打印$0"后缀"}'

对于前缀和后缀:awk '{打印“前缀”$0“后缀”}'

使用Pythonize (pz):

pz '"preix"+s' <filename
awk '$0="prefix"$0' file > new_file

在awk中,默认操作是'{print $0}'(即打印整行),因此上面的操作相当于:

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

使用Perl(就地替换):

perl -pi 's/^/prefix/' file

对于使用BSD/OSX系统的人来说,有一个实用程序叫做lam,是laminate的缩写。Lam -s前缀文件将做你想做的。我把它用在管道上,例如:

查找type f -exec lam -s "{}: " "{}" \;| fzf

...这将找到所有的文件,exec lam对他们每个,给每个文件自己的文件名的前缀。(并将输出泵到fzf进行搜索。)

你可以在Ex模式下使用Vim:

ex -sc '%s/^/prefix/|x' file

%选择所有行 年代取代 保存并关闭