关于sed或awk的面试问题

关于sed或awk的面试问题,awk,sed,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

嗨,我最近在一个关于文件编辑的采访问题上崩溃了。有点烦我。我在论坛上搜索了一下,但还是成功了

问题是:

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,但文本并没有在需要的地方出现。如果有任何帮助,我们将不胜感激。

将此贴在原始问题上,以便在文本文件中插入第二行

这里有一种使用sed的方法

用于在每行后面插入文本

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

如果你不明白这是什么,请阅读一些教程,互联网上到处都是这些教程。

如果输出与某个测试文本的重复短语匹配,我认为

some test text 1
some more test text
some test text 2
some more test text
some test text 3
some more test text
当然,substitute命令的RHS中的&char会捕获所有匹配的字符并将它们插入到输出中。我们在新行中添加了\n更多的测试文本,我们很好

请注意,非gnu/linux SED可能无法识别为换行符,\n在这种情况下,您需要使用组合键Ctrl-V Ctrl-M将换行符添加到输出中。我从未见过它解释了^M在文件中如何转换为^J,但它可以追溯到80年代,所以请想想


IHTH

这可能适用于您的GNU-sed:

sed -i 'asome more test text' file
这将在每一行添加更多的测试文本,并修改原始文件

给定:

$ 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

那不行。此外,这不会写入文件…我给你提示,以激励你学习更多。输出可以定向到任何文件。这里我从管道输入开始,这样就没有要覆盖的文件了。sed具有-i选项,可以对给定的文件输入进行就地编辑。@nycjay01,如果第一个空格被转义,则可以插入前导空格:sed'1~1a\hello world'dev-null,先生,您是救世主。通过以下步骤实现:sed-i“1~1a\some more test text”testfile.txt注意,2iinserted在GNU-sed中工作,但在BSD-sed中不工作,它需要一个换行符来跟随i命令。因此在bash中,seq 3 | sed$'2i\\\n inserted'得到相同的结果。但是,在一行程序中不进行格式扩展更为棘手`没有添加文本:-arg这感觉很痒LOL@nycjay01:如果你说它不起作用,那么用uname-a的输出更新你的Q;sed版本。或者如果你的意思是,没有保存到文件中,sed-i。。。根据您的sed和操作系统版本的不同,最有可能工作。最后,我发现我错过了一个结束字符,现在添加到上面的代码中。祝你好运。我不知道为什么我会有负面的看法,但我希望这能帮助其他人。修复非常简单,只需使用以下命令:sed-i'1~1a\some more test text'testfile.txt
$ echo "$txt"
some test text 1
some test text 2
some test text 3
$ 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