使用awk在文件中的字符串之前添加一行

阿迪乔

我想加一行

allow = alaw

在字符串之前

nat = no

在文件sip.conf(或任何基于文本的文件)中。如果allow = alaw已经存在,nat = no则不应添加。并且不应在该文件的[general]之后的两部分中添加该行[providertrunk0]

示例文件内容:

[general]
disallow = all
allow = ulaw
nat = no

[providertrunk0]
disallow = all
allow = ulaw
;allow = alaw
nat = no

secret =
nat = no
progressinband = yes

allow = ulaw
allow = alaw
nat = no
progressinband = yes

disallow = all
allow = ulaw
nat = no
progressinband = yes

更改后它将是

[general]
disallow = all
allow = ulaw
nat = no

[providertrunk0]
disallow = all
allow = ulaw
;allow = alaw
nat = no

secret =
allow = alaw
nat = no
progressinband = yes

allow = ulaw
allow = alaw
nat = no
progressinband = yes

disallow = all
allow = ulaw
allow = alaw
nat = no
progressinband = yes

我的尝试

我试图要排除[general][providertrunk0]部分的整个过程,但要'/general/,/providertrunk0/{next}'像这样使用整个文件

awk -v add="allow = alaw" '/general/,/providertrunk0/{next} /^nat = no$/&&lastLine!=add{print add}{lastLine=$0}1' sip.conf '

但它没有给出正确的输出。

埃德·莫顿
$ cat tst.awk
BEGIN {
    RS=""; ORS="\n\n"; FS=OFS="\n"
    skip["[general]"]
    skip["[providertrunk0]"]
    add = "allow = alaw"
    tgt = "nat = no"
}
!($1 in skip) {
    for (i=1; i<NF; i++) {
        if ( ($i != add) && ($(i+1) == tgt) ) {
            $i = $i OFS add
        }
    }
}
{ print }

$ awk -f tst.awk file
[general]
disallow = all
allow = ulaw
nat = no

[providertrunk0]
disallow = all
allow = ulaw
;allow = alaw
nat = no

secret =
allow = alaw
nat = no
progressinband = yes

allow = ulaw
allow = alaw
nat = no
progressinband = yes

disallow = all
allow = ulaw
allow = alaw
nat = no
progressinband = yes

RS设置为空放的awk段模式(见RS = ""https://www.gnu.org/software/gawk/manual/gawk.html#Multiple-Line),所以你的输入被分成多行记录通过空行分开。设置ORS =“ \ n \ n”可确保在输出时记录之间留空行。将FS和OFS设置为“ \ n”意味着将记录分为多个字段。因此,剩下的代码就变得微不足道了,因为您可以将特定字段(行)与问题中提到的值进行比较。skip[]只是我为要存储要在该数组中进行进一步处理而忽略的第一字段(第一行)字符串的任何数组组成的名称,然后针对每个记录测试记录的第一字段/行是否在其中数组,如果是,则跳过对其进行处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Ansible删除文件中字符串之前的每一行

来自分类Dev

如何使用 Bash 将字符串添加到文件中的每一行

来自分类Dev

如何使用sed将字符串添加到文件中每一行的开头?

来自分类Dev

给带有特定字符串的sed文件中的每一行添加#

来自分类Dev

如何在文件的第n列和第一行中添加字符串?

来自分类Dev

在文件的每一行中添加一个字符串,每个文件中添加的字符串增加1

来自分类Dev

在文件的每一行中添加一个字符串,每个文件中添加的字符串增加1

来自分类Dev

从文件中读取一行字符串

来自分类Dev

Powershell-使用字符串在Format-Table的每一行之前添加前缀

来自分类Dev

使用 python 2 向列表中的每一行添加相同的字符串

来自分类Dev

如何使用Unix从文件的每一行中获取特定字符串的搜索计数?

来自分类Dev

如何使用grep仅在文件的第一行中搜索特定字符串?

来自分类Dev

sed-在文件的最后一行之前插入字符串

来自分类Dev

我想使用Java在文件的最后一行中添加一些字符串,但是我被卡住了,需要帮助:)

来自分类Dev

在文本文件中同一行中的某个字符串之后添加字符串

来自分类Dev

搜索字符串并使用awk打印第一行的第一列

来自分类Dev

蟒蛇| 如何将字符串添加到 csv 文件中的每一行?

来自分类Dev

从awk脚本中的变量字符串中删除最后一行

来自分类常见问题

使用Python3在文件中搜索字符串,将下一行的结果添加到数组中,然后在下一个字符串处停止

来自分类Dev

如何根据某些字符串提取一行和一行之前的行

来自分类Dev

如何使用带有变量、字符串和新行的 printf 在 bash 中的一行中写入文件

来自分类Dev

AWK:在同一行中的模式之间打印并反转匹配字符串的顺序

来自分类Dev

使用C ++仅从文本文件中读取同一行中特定搜索的字符串之后的字符串/字符/数据

来自分类Dev

使用awk的矩阵每一行的字符串总和

来自分类Dev

在“多文件”中搜索“多字符串”并打印“一行中每个文件的结果”

来自分类Dev

如何在iOS中向UITableView的最后一行添加带字符串的一行?

来自分类Dev

读取文件的第一行并将其与外壳文件中的字符串进行比较

来自分类Dev

在文件中的一行中查找字符串并在UNIX中显示它

来自分类Dev

如何使用sed替换文件中每一行的字符串前的第n个空格

Related 相关文章

  1. 1

    使用Ansible删除文件中字符串之前的每一行

  2. 2

    如何使用 Bash 将字符串添加到文件中的每一行

  3. 3

    如何使用sed将字符串添加到文件中每一行的开头?

  4. 4

    给带有特定字符串的sed文件中的每一行添加#

  5. 5

    如何在文件的第n列和第一行中添加字符串?

  6. 6

    在文件的每一行中添加一个字符串,每个文件中添加的字符串增加1

  7. 7

    在文件的每一行中添加一个字符串,每个文件中添加的字符串增加1

  8. 8

    从文件中读取一行字符串

  9. 9

    Powershell-使用字符串在Format-Table的每一行之前添加前缀

  10. 10

    使用 python 2 向列表中的每一行添加相同的字符串

  11. 11

    如何使用Unix从文件的每一行中获取特定字符串的搜索计数?

  12. 12

    如何使用grep仅在文件的第一行中搜索特定字符串?

  13. 13

    sed-在文件的最后一行之前插入字符串

  14. 14

    我想使用Java在文件的最后一行中添加一些字符串,但是我被卡住了,需要帮助:)

  15. 15

    在文本文件中同一行中的某个字符串之后添加字符串

  16. 16

    搜索字符串并使用awk打印第一行的第一列

  17. 17

    蟒蛇| 如何将字符串添加到 csv 文件中的每一行?

  18. 18

    从awk脚本中的变量字符串中删除最后一行

  19. 19

    使用Python3在文件中搜索字符串,将下一行的结果添加到数组中,然后在下一个字符串处停止

  20. 20

    如何根据某些字符串提取一行和一行之前的行

  21. 21

    如何使用带有变量、字符串和新行的 printf 在 bash 中的一行中写入文件

  22. 22

    AWK:在同一行中的模式之间打印并反转匹配字符串的顺序

  23. 23

    使用C ++仅从文本文件中读取同一行中特定搜索的字符串之后的字符串/字符/数据

  24. 24

    使用awk的矩阵每一行的字符串总和

  25. 25

    在“多文件”中搜索“多字符串”并打印“一行中每个文件的结果”

  26. 26

    如何在iOS中向UITableView的最后一行添加带字符串的一行?

  27. 27

    读取文件的第一行并将其与外壳文件中的字符串进行比较

  28. 28

    在文件中的一行中查找字符串并在UNIX中显示它

  29. 29

    如何使用sed替换文件中每一行的字符串前的第n个空格

热门标签

归档