代码之家  ›  专栏  ›  技术社区  ›  Vijay

awk替换文本但不替换最后一行

  •  2
  • Vijay  · 技术社区  · 15 年前

    gawk -v var="hot" "{ if(!NR){gsub(/cool/,var,$0) ;print} else{print}}" awk_test
    

    输入文件在下面

     this is a cool jack
     this nota cool kack
     this obviously a cool jack 
    

    unix解决方案也是可行的

    3 回复  |  直到 15 年前
        1
  •  0
  •   ghostdog74    15 年前
    awk -vvar="hot" '{gsub("cool",hot,t);print t}{t=$0}END{print}' file
    
        2
  •  0
  •   tonio    15 年前

    sed '$d' yourfile | sed 's/cool/hot/g' > newfile
    tail -1 yourfile >> newfile
    

    除了文件的最后一行之外,应该先替换所有内容,然后添加原始文件的最后一行。

        3
  •  0
  •   glenn jackman    15 年前

    也可以将行数作为参数传递:

    gawk -v var=hot -v lines=$(wc -l < test.txt) '
        NR != lines {gsub(/cool/, var)} 
        {print}
    ' test.txt