-1

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

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 实现这一目标?

4

6 回答 6

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
于 2013-08-22T06:18:19.883 回答
1

如果您的文件不是以换行符开头并且具有问题中所示的换行符,请使用:

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

如果文件没有新行,并且您想$.$在每个备用行之前放置您所说的:

sed -i.bak 'n;s/^/$.$/' file
于 2013-08-22T07:19:18.060 回答
1

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

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

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

于 2013-08-22T08:18:59.257 回答
0

使用 awk -n在 BEGIN 模式中初始化变量,然后通过测试n.

awk 'BEGIN{n=1}
{
     if (n++ % 2)
       print $0
     else
       print "$:$"$0
}' datafile
于 2013-08-22T06:14:58.550 回答
0

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

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

wednesday

$:$Weekday

thursday

$:$Weekday


friday

$:$Weekday

saturday

$:$MaybeNot

sunday

$:$MaybeNot

monday

$:$Weekday

tuesday
$:$Weekday
于 2013-08-22T06:44:00.410 回答
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
于 2013-08-22T06:55:19.917 回答