标签: perl

如何替换文件中的字符串?

根据某些搜索条件替换文件中的字符串是一项非常常见的任务。我怎样才能

  • 替换字符串foobar在当前目录下的所有文件?
  • 对子目录递归执行相同的操作吗?
  • 仅当文件名匹配另一个字符串时才替换?
  • 仅当在特定上下文中找到字符串时才替换?
  • 替换字符串是否在某个行号上?
  • 用相同的替换替换多个字符串
  • 用不同的替换替换多个字符串

sed awk perl text-processing

879
推荐指数
8
解决办法
171万
查看次数

您如何以人类可读的格式列出目录中每个文件的行数。

我有一个包含大型 csv 文件的目录和子目录列表。这些文件大约有 5 亿行,每一行都是一条记录。我想知道

  1. 每个文件有多少行。
  2. 目录中有多少行。
  3. 总共多少行

最重要的是,我需要“人类可读的格式”,例如。12,345,678 而不是 12345678

学习如何以 3 种方式做到这一点会很好。普通的 bash 工具、awk 等,以及 perl(或 python)。

bash awk python perl

67
推荐指数
4
解决办法
15万
查看次数

如何在模式(标记)之前将文件的内容插入到另一个文件中?

File1 内容:

line1-file1      "1" 
line2-file1      "2"
line3-file1      "3" 
line4-file1      "4" 
Run Code Online (Sandbox Code Playgroud)

File2 内容:

line1-file2     "25"  
line2-file2     "24"  
Pointer-file2   "23"  
line4-file2     "22" 
line5-file2     "21"
Run Code Online (Sandbox Code Playgroud)

perl/shell脚本执行后,File2内容应该变成:

line1-file2     "25"  
line2-file2     "24" 
line1-file1      "1" 
line2-file1      "2"
line3-file1      "3" 
line4-file1      "4" 
Pointer-file2   "23" 
line4-file2     "22" 
line5-file2     "21"
Run Code Online (Sandbox Code Playgroud)

File1File2包含“指针”的行之前粘贴in的内容。

sed awk perl text-processing

48
推荐指数
7
解决办法
9万
查看次数

${1+"$@"} 在 shell 脚本中是什么意思,它与 "$@" 有何不同?

在 Perl 文档中,perlrun(1)建议使用双语 shell/Perl 头文件启动 Perl 脚本:

#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
    if 0;
Run Code Online (Sandbox Code Playgroud)

什么${1+"$@"}意思?我尝试"$@"改用(使用 Bash 作为 /bin/sh),它似乎也能正常工作。


编辑

下面的两个答案说它应该是${1:+"$@"}. 我知道${parameter:+word}bash(1) 中记录的(“使用替代值”)语法。然而,我不相信,因为

  1. 无论${1+"$@"}"$@"工作得很好,即使在没有参数。如果我创建 simple.sh 作为

    #!/bin/sh
    eval 'exec /usr/bin/perl -x -S -- $0 "$@"'
        if 0;
    #!perl
    use Data::Dumper;
    print Dumper(\@ARGV);
    
    Run Code Online (Sandbox Code Playgroud)

    和 question.sh 作为

    #!/bin/sh
    eval 'exec /usr/bin/perl -x -S -- $0 ${1+"$@"}'
        if 0;
    #!perl
    use Data::Dumper;
    print Dumper(\@ARGV);
    
    Run Code Online (Sandbox Code Playgroud)

    我可以让两者以相同的方式工作: …

shell bash perl

47
推荐指数
2
解决办法
4万
查看次数

如何“grep”给定范围内的行长?

注意:这个问题是这个问答的补充:如何在给定范围内“grep”行长度*不*?


我只需要从长度范围为最小或等于 3 个字符但不长于或等于 10 的文本文件(一个单词列表,用换行符分隔)中获取行。

例子:

输入:

egyezményét
megkíván
ki
alma
kevesen
meghatározó
Run Code Online (Sandbox Code Playgroud)

输出:

megkíván
alma
kevesen
Run Code Online (Sandbox Code Playgroud)

问题:我怎样才能做到这一点bash

grep bash sed perl

41
推荐指数
3
解决办法
7万
查看次数

如何组合以反斜杠字符结尾的所有行?

使用像 sed 或 awk 这样的常用命令行工具,是否可以连接以给定字符结尾的所有行,如反斜杠?

例如,给定文件:

foo bar \
bash \
baz
dude \
happy
Run Code Online (Sandbox Code Playgroud)

我想得到这个输出:

foo bar bash baz
dude happy
Run Code Online (Sandbox Code Playgroud)

sed awk perl text-processing

39
推荐指数
3
解决办法
3万
查看次数

Linux 相当于 PowerShell 的“一对多”远程处理

来自 Windows 管理,我想更深入地研究 Linux (Debian)。我在网上搜索(没有找到)时无法回答的一个紧迫问题是:如何像在 Windows PowerShell 中那样实现所谓的“一对多”远程处理?

为了将其分解为基础知识,我会说:

我对 Linux 的看法:

  • 我可以通过 ssh 进入服务器并输入我的命令
  • 我得到了结果。对于 10 个服务器的环境,我必须编写一个(perl/python?)脚本,为每个服务器发送命令?

我在 Windows 上的经验:

  1. 我输入我的命令并使用“invoke-command”我可以将其“发送”到一堆服务器(可能来自文本文件)以同时执行并返回结果(作为进一步工作的对象)。

  2. 我什至可以建立多个会话,连接在后台保持,并有选择地向这些会话发送命令,并根据需要远程进出。

(我听说过厨师、木偶等。是这样的吗?)


Update 2019:
在尝试了很多之后 - 我建议Rex(见下面的评论) - 简单的设置(实际上它只需要 ssh,没有别的)和使用(如果你知道一点点perl,它会更好,但它是可选的)
Rex(ify) )您可以执行adhoc命令并将其推进到真正的配置管理中(...意思是:它首先是一个 CM,但也适用于临时任务)网站接缝已过时,但目前(截至 01/2019)它正在积极开发中,IRC 频道也处于活跃状态。

有了 Windows 的新openssh,还有更多的可能性

你可以试试: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'

linux ssh remote-management perl

39
推荐指数
4
解决办法
5261
查看次数

将 CSV 转换为 TSV

我有许多大型 CSV 文件,并希望它们采用 TSV(制表符分隔格式)。复杂的是CSV文件的字段中有逗号,例如:

 A,,C,"D,E,F","G",I,"K,L,M",Z
Run Code Online (Sandbox Code Playgroud)

预期输出:

 A      C   D,E,F   G   I   K,L,M   Z
Run Code Online (Sandbox Code Playgroud)

(中间的空格是“硬”标签)

我在这台服务器上安装了 Perl、Python 和 coreutils。

python perl text-processing csv

34
推荐指数
9
解决办法
3万
查看次数

如何知道进程进入睡眠状态并唤醒它的原因?

当我执行 'top' 时,我看到我的 perl 脚本进程处于 'S' 状态。有没有办法知道,是什么让这个 perl 进程进入睡眠状态以及唤醒它的方法?任何调试方法以提供有关 perl 脚本中行的更多见解,使其进入“S”状态。

linux process top administration perl

33
推荐指数
2
解决办法
5万
查看次数

运行 perl -ne '...' 的安全隐患 *

显然,运行:

perl -n -e 'some perl code' *
Run Code Online (Sandbox Code Playgroud)

或者

find . ... -exec perl -n -e '...' {} +
Run Code Online (Sandbox Code Playgroud)

(与-p代替相同-n

或者

perl -e 'some code using <>' *
Run Code Online (Sandbox Code Playgroud)

经常在本网站上发布的 one-liners 中发现,具有安全隐患。这是怎么回事?如何避免?

security options perl filenames

32
推荐指数
2
解决办法
2765
查看次数