+ -
当前位置:首页 → 问答吧 → 为什么用这条指令并没有实际的修改文件?

为什么用这条指令并没有实际的修改文件?

时间:2010-10-18

来源:互联网

perl -ne 'print "test\n" if $.==3;print;' 200800117_haha_abc_flow

请问如何实际的修改文件200800117_haha_abc_flow

作者: ztj2247   发布时间: 2010-10-18

本帖最后由 兰花仙子 于 2010-10-18 12:15 编辑

通常是:perl -pi -le 's/xx/yy/' a.txt

不明白你想如何修改。

作者: 兰花仙子   发布时间: 2010-10-18

perl -i.bak -pe
推荐你看一下这个
http://www.php-oa.com/2009/08/28/perl-awk-sed.html

作者: 珞水的大叔   发布时间: 2010-10-18



QUOTE:
通常是:perl -pi -ne 's/xx/yy/' a.txt

不明白你想如何修改。
兰花仙子 发表于 2010-10-18 11:23




    就是想实现 SED 在某行 行尾的追加功能

作者: ztj2247   发布时间: 2010-10-18

你的程序會把更改過的結果發送到標準輸出,而不是更改文件本身, 按照大叔的方法, 或者把輸出重定向到一個文件中.

作者: wind_ch   发布时间: 2010-10-18



QUOTE:
就是想实现 SED 在某行 行尾的追加功能
ztj2247 发表于 2010-10-18 11:30

  1. [pop@localhost tmp]$ cat 1.dat
  2. 1 2 3 4
  3. a b c d
  4. 332211

  5. [pop@localhost tmp]$ perl -pi -le 's/$_/$_ "wanted"/ if $.==2' 1.dat   

  6. [pop@localhost tmp]$ cat 1.dat
  7. 1 2 3 4
  8. a b c d "wanted"
  9. 332211
复制代码

作者: 兰花仙子   发布时间: 2010-10-18

  1. [pop@localhost tmp]$ perl -pi -le '$_="$_ again" if $.==2' 1.dat   
  2.                      
  3. [pop@localhost tmp]$ cat 1.dat
  4. 1 2 3 4
  5. a b c d "wanted" again
  6. 332211
复制代码

作者: 兰花仙子   发布时间: 2010-10-18

仙子的方法都很好
其中我最喜欢下面这个,因为s/$_/$_ "wanted"/很豪迈
  1. perl -pi -le 's/$_/$_ "wanted"/ if $.==2' 1.dat
复制代码

作者: 珞水的大叔   发布时间: 2010-10-18