在每行的开头添加前缀string

我有一个文件如下:

line1 line2 line3 

我想得到:

 prefixline1 prefixline2 prefixline3 

我可以写一个Ruby脚本,但是如果我不需要,那会更好。

prefix将包含/ 。 这是一条道路。 /opt/workdir/例如。

 sed -e 's/^/prefix/' file # If you want to edit the file in-place sed -i -e 's/^/prefix/' file # If you want to create a new file sed -e 's/^/prefix/' file > file.new 

如果prefix包含/ ,则可以使用其他任何不在prefix字符,或者转义/ ,以便sed命令变为

 's#^#/opt/workdir#' # or 's/^/\/opt\/workdir/' 
 awk '$0="prefix"$0' file > new_file 

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

 ex -sc '%s/^/prefix/|x' file 
  1. %select所有行

  2. 取而代之

  3. 保存并closures

如果你的前缀有点复杂,就把它放在一个variables中:

 prefix=path/to/file/ 

然后,你通过这个variables让awk处理它:

 awk -v prefix="$prefix" '{print prefix $0}' input_file.txt 

如果你有Perl:

 perl -pe 's/^/PREFIX/' input.file 

使用shell:

 #!/bin/bash prefix="something" file="file" while read -r line do echo "${prefix}$line" done <$file > newfile mv newfile $file 

虽然我不认为pierr有这个问题,但我需要一个解决scheme,不会延迟文件的实时“尾部”的输出,因为我想同时监视多个警报日志,在每行前加上各自日志的名称。

不幸的是,sed,cut等引入了太多的缓冲,使我看不到最新的线路。 Steven Pennybuild议使用nl-s选项是有趣的,testingcertificate它没有引入关注我的不需要的缓冲。

然而,使用nl有一些问题,与删除不需要的行号的愿望有关(即使你不关心它的美观性,可能会出现使用额外列的情况) 。 首先,使用“剪切”去除数字重新引入缓冲问题,所以它破坏了解决scheme。 其次,使用“-w1”没有帮助,因为这不会将行号限制为单列 – 只要需要更多数字,它就会变得更宽。

如果你想在其他地方捕捉到这些并不美妙,但是因为这正是我不需要做的事情(所有东西都已经被写入日志文件,我只是想实时看几个),最好的方法丢失行号,只有我的前缀是用回车(CR或^ M或Ctrl-M)启动-sstring。 举个例子:

 #!/bin/ksh # Monitor the widget, framas, and dweezil # log files until the operator hits <enter> # to end monitoring. PGRP=$$ for LOGFILE in widget framas dweezil do ( tail -f $LOGFILE 2>&1 | nl -s"^M${LOGFILE}> " ) & sleep 1 done read KILLEM kill -- -${PGRP} 

下面是一个使用sed方法的例子:

 $ cat /path/to/some/file | prefix_lines "WOW: " WOW: some text WOW: another line WOW: more text 

prefix_lines

 function show_help() { IT=$(CAT <<EOF Usage: PREFIX {FILE} eg cat /path/to/file | prefix_lines "WOW: " WOW: some text WOW: another line WOW: more text ) echo "$IT" exit } # Require a prefix if [ -z "$1" ] then show_help fi # Check if input is from stdin or a file FILE=$2 if [ -z "$2" ] then # If no stdin exists if [ -t 0 ]; then show_help fi FILE=/dev/stdin fi # Now prefix the output PREFIX=$1 sed -e "s/^/$PREFIX/" $FILE 

请使用下面的命令

SED将以前缀replace开头。

sed的%^%前缀%“文件