使用sed / awk编辑文件

时间:2013-08-22 06:06:23

标签: regex sed awk

我有一个包含以下数据的文件:

wednesday
Weekday

thursday
Weekday

friday
Weekday

saturday
MaybeNot

sunday
MaybeNot

monday
Weekday

tuesday
Weekday

我想在每个备用行的前面插入一个字符串$:$,以便重写文件如下:

wednesday
$:$Weekday

thursday
$:$Weekday

friday
$:$Weekday

saturday
$:$MaybeNot

sunday
$:$MaybeNot

monday
$:$Weekday

tuesday
$:$Weekday

我如何使用awk / sed实现这一目标?

6 个答案:

答案 0 :(得分:3)

确定。这里。

cat << EOF | awk -vRS="" '{print $1 "\n$:$" $2 "\n" }'       
wednesday
Weekday

thursday
Weekday

friday
Weekday

saturday
MaybeNot

sunday
MaybeNot

monday
Weekday

tuesday
Weekday
EOF

...给出

wednesday
$:$Weekday

thursday
$:$Weekday

friday
$:$Weekday

saturday
$:$MaybeNot

sunday
$:$MaybeNot

monday
$:$Weekday

tuesday
$:$Weekday

答案 1 :(得分:1)

如果您的文件没有以换行符开头,并且您的问题中显示了换行符,请使用:

sed -i.bak '2s/^/$.$/;3,${n;n;s/^/$.$/;}' file

如果文件中没有新行,而您希望在每个备用行之前添加$.$,则说明问题:

sed -i.bak 'n;s/^/$.$/' file

答案 2 :(得分:1)

$:$添加到从第2行开始的每第3行,使用GNU sed执行此操作:

sed -i '2~3s/^/$:$/' infile

请注意,这会覆盖infile,所以要小心。

答案 3 :(得分:0)

使用awk - 变量n在BEGIN模式中初始化,然后通过测试n的奇数/平均值来打印行。

awk 'BEGIN{n=1}
{
     if (n++ % 2)
       print $0
     else
       print "$:$"$0
}' datafile

答案 4 :(得分:0)

使用perlre,所以如果你知道perlre,那很简单。如果要修改目标文件,请使用-i。

cat t|ssed 's/^\([A-Z]\)/$:$&/'

wednesday

$:$Weekday

thursday

$:$Weekday


friday

$:$Weekday

saturday

$:$MaybeNot

sunday

$:$MaybeNot

monday

$:$Weekday

tuesday
$:$Weekday

答案 5 :(得分:0)

awk '/^[[:upper:]]/ {$0="$:$"$0}1' file

替换文件

awk '/^[[:upper:]]/ {$0="$:$"$0}1' file > tmp ; mv tmp file

修改 另一个版本(这需要格式化始终相同):

awk 'NR%3==2 {$0="$:$"$0} 1' file