小编use*_*046的帖子

编辑文件中的最后一个实例

我有一个巨大的文本文件(~1.5GB),其中有许多行以“.Ends”结尾。
\n我需要一个 Linux oneliner (perl\\ awk\\ sed) 来查找文件中出现的最后一个位置 '.Ends' 并在其前面添加几行。

\n

我尝试使用tac两次,并偶然发现了我的 perl:

\n

当我使用:
\n tac ../../test | perl -pi -e 'BEGIN {$flag = 1} if ($flag==1 && /.Ends/) {$flag = 0 ; print "someline\\n"}' | tac
\n它首先打印“someline\\n”,然后只打印 .Ends\n结果是:
\n\xe2\x80\xa6
\n.Ends
\nsomeline

\n

当我使用:
\n tac ../../test | perl -e 'BEGIN {$flag = 1} print ; if ($flag==1 && /.Ends/) {$flag = 0 ; print "someline\\n"}' | tac
\n它不会\xe2\x80\x99t 打印任何内容。

\n

当我使用时:
\n tac …

perl awk sed ed

8
推荐指数
2
解决办法
318
查看次数

如何在emacs中查找别名

我想检查函数是否存在默认\现有别名(在这种情况下:x-clipboard-yank,但问题是一般的).
是否有一个emacs函数显示我可以用它来计算的活动别名?
预期的行为类似于shell alias命令.

emacs alias

5
推荐指数
1
解决办法
345
查看次数

perl:传递子例程rexexp替换为搜索结果

我有以下perl子例程:

sub rep {

 defined ($filein = shift) || die ("no filein");
 defined ($fileout = shift) || die ("no fileout");
 $look = shift;
 $replace = shift;
 open (infile, "$filein")|| die;
 open (outfile, "> $fileout")|| die;
 while (<infile>) {
   s/$look/$replace/g;
   print outfile;
 }
(close the files)
}
Run Code Online (Sandbox Code Playgroud)

以及以下文字:

kuku(fred) foo(3)
kuku(barney) foo(198)
Run Code Online (Sandbox Code Playgroud)

我想用以下结构来调用它:

$look = kuku\((\w+)\) foo \((\d+)\),
$replace = gaga\(($1)\) bar\(($2)\).
Run Code Online (Sandbox Code Playgroud)

但是当我使用以下(以及它的变体)调用sub时,我无法接受$ 1,$ 2格式:

&rep ($ARGV[0], $ARGV[1], 
    "kuku\\(\(\\w+\)\\) foo \\(\(\\d+\)\\)" , 
    "gaga\\(\(\$1\)\\) bar\\(\(\$2\)\\)");
Run Code Online (Sandbox Code Playgroud)

我得到的是:

gaga($1) bar($2)
gaga($1) bar($2)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何让子程序识别$ 1\$ …

regex parameters perl subroutine

3
推荐指数
1
解决办法
993
查看次数

标签 统计

perl ×2

alias ×1

awk ×1

ed ×1

emacs ×1

parameters ×1

regex ×1

sed ×1

subroutine ×1