我有一个包含以下数据的文件:
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实现这一目标?
答案 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