关于sed或awk的面试问题

时间:2016-03-15 20:05:51

标签: awk sed

您好我最近因文件编辑的采访问题而崩溃并烧毁。有点在烦我。我在论坛上搜索过,但确实很好。

问题是:

testfile.txt具有以下内容:

     some test text 1
     some test text 2
     some test text 3

更改testfile.txt,使它看起来像这样(不使用VI或gedit):

     some test text 1
     some more test text
     some test text 2
     some more test text
     some test text 3
     some more test text

我曾尝试使用sed和awk,但文本并未出现在需要的位置。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

sed -i 'asome more test text' file

这会将文本some more test text附加到每一行并修改原始文件。

答案 1 :(得分:2)

假设:

$ echo "$txt"
some test text 1
some test text 2
some test text 3

在awk中:

$ echo "$txt" | awk '{print; print "some more test text"}'
some test text 1
some more test text
some test text 2
some more test text
some test text 3
some more test text

答案 2 :(得分:1)

将此内容发布为原始问题,以便将第二行插入文本文件。

这是使用sed

执行此操作的一种方法
$ seq 3 | sed 2iinserted
1
inserted
2
3

用于在每行之后插入文本

$ seq 3 | sed 1~1ainserted
1
inserted
2
inserted
3
inserted

如果您不明白这是什么,请阅读一些教程,互联网上充满了它们。

答案 3 :(得分:0)

鉴于输出匹配重复短语some test text,我认为

  sed 's/some test text.*/&\nsome more test text/' file

会做

some test text 1
some more test text
some test text 2
some more test text
some test text 3
some more test text

当然& ubstitute命令的RHS中的s char捕获匹配的所有字符并将它们插入到输出中。我们在新行上添加了\n some more test text,我们很好。

请注意,非gnu / linux seds可能无法将\n识别为换行符,在这种情况下(从cmd行开始),您需要使用组合键Ctrl-V Ctrl-M添加换行符你的输出。 (我从来没有看到它解释了^M如何在文件中转换为^J,但它可以追溯到80年代,所以请参阅图。)

IHTH