当前位置: 首页 > 面试题库 >

使用sed命令在文件的两个模式之间添加文本

井唯
2023-03-14
问题内容

我想在两种模式之间添加一些大代码

File1.txt

This is text to be inserted into the File.

infile.txt

Some Text here
First
Second
Some Text here

我想在 第一第二 之间添加 File1.txt 内容:

所需输出:

Some Text here
First
This is text to be inserted into the File.
Second
Some Text here

我可以使用sed命令使用两种模式进行搜索,但是我不知道如何在它们之间添加内容。

sed '/First/,/Second/!d' infile

问题答案:

由于/r代表 读取文件 ,请使用:

sed '/First/r file1.txt' infile.txt

您可以在此处找到一些信息:使用’r’命令读取文件。

为就地版本添加-i(即sed -i '/First/r file1.txt' infile.txt)。

要执行此操作,无论字符大小写如何,均应使用在忽略大小写时使用sed中I建议的标记,同时在某些模式之前添加文本:

sed 's/first/last/Ig' file

如评论中所述,以上解决方案只是在模式之后打印给定的字符串,而没有考虑第二个模式。

为此,我将使用带有标志的awk:

awk -v data="$(<patt_file)" '/First/ {f=1} /Second/ && f {print data; f=0}1' file

给定这些文件:

$ cat patt_file
This is text to be inserted
$ cat file
Some Text here
First
First
Second
Some Text here
First
Bar

让我们运行命令:

$ awk -v data="$(<patt_file)" '/First/ {f=1} /Second/ && f {print data; f=0}1' file
Some Text here
First                             # <--- no line appended here
First
This is text to be inserted       # <--- line appended here
Second
Some Text here
First                             # <--- no line appended here
Bar


 类似资料:
  • 问题内容: 在这种情况下,如何在搜索pattern = first时忽略大小写 问题答案: 您可以使用以下内容: 否则,您将具有和标志: 来自man sed: 一世 一世 正则表达式匹配的I修饰符是GNU扩展,它使sed匹配正则表达式不区分大小写。 测试

  • 问题内容: 我需要从一个巨大的文件中提取两个匹配模式之间的特定行。 假设(文件中唯一)匹配特定内容, (文件中不唯一)匹配之后的下一个立即匹配项。然后我要提取之间的所有行,包括 样本文件内容 期望的输出 如果您能帮助我解决这个问题,将不胜感激 问题答案: 这可以是一种方法: 找到时,则使变量p = 1。 它仅在时打印行。这是通过条件完成的。如果为true,它将执行默认的awk操作,即。否则,事实并

  • sed能在PATTERN1和PATTERN2或pattern3之间打印文本吗?例如,对于下面的两个示例,我希望显示输出: 到目前为止,我的sed命令是,但这也会打印“fusa\n bad”,这是我不想要的。sed是否具有“或”特性,比如,目的是从Lemur匹配到输入的末尾,或者不以空白开头的行。另外,我希望只打印第一个模式(狐猴)后面以空白开始的行(即,我不希望在第一个示例中打印“FUSA”)。

  • 让我们假设我有一个名为inputFile的文件,看起来像这样: 整个文件只包含一条长线。 我想用sed(substring,substring2)提取令牌之间的子字符串。 现在我有: 我试图根据这些问题来做这件事,但不幸的是,它只返回最后一个子字符串 使用bash提取文本文件中两个标记之间的行 如何替换多个模式一次与se? 如何在两个图案之间选择线条? 有解释的答案会很好。 更新实际输入代码: 预

  • 问题内容: 我有一个大文本文件(URL.txt),我希望使用一个 sed 命令执行以下操作: 查找行号19和33之间的文本“ google”并将其替换为“ facebook”。 在终端上显示输出而不更改原始文件。 问题答案: 您可以使用SED的范围选择器: 这将在19(不含)和33(含)之间的行上进行替换 请注意,这只会替换每行的第一次出现,您可以使用-modifier更改此行为:

  • 我复制并制作一个文件。 当我对文件进行分类时,我得到: 然后我并立即显示: 但是当我再次使用cat键盘2时,我得到: 用sudo测试,用's/fr/us/'测试 我理解错了什么吗?sed应该写入文件还是需要通过管道覆盖原始文件?非常感谢。 版本: