标签: awk

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

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

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

sed awk perl text-processing

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

是否有 grep、awk 和 sed 的基本教程?

我已经成为 Linux 用户有一段时间了,我对大多数常见的命令行实用程序有相当不错的了解。然而,那些上来,再次相对于编程是grepawksed

关于我使用 grep 的唯一目的是将内容输送到它以查找日志文件中的文件、输出ps等。我没有使用过awk或根本没有使用sed过。这些实用程序有什么好的教程吗?

grep sed awk

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

使用 awk 根据另一列的值对一列的值求和

我正在尝试使用awk. 我只想对“smiths”的第 3 列求和,总共得到 212。我可以使用awk但不仅仅是“smiths”来对整个列求和。我有:

awk 'BEGIN {FS = "|"} ; {sum+=$3} END {print sum}' filename.txt
Run Code Online (Sandbox Code Playgroud)

我也在使用腻子。感谢您的任何帮助。

smiths|Login|2
olivert|Login|10
denniss|Payroll|100
smiths|Time|200
smiths|Logout|10
Run Code Online (Sandbox Code Playgroud)

awk

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

在目录列表中显示文件大小的总和

Windowsdir目录列表命令的末尾有一行显示列出的文件占用的空间总量。例如,dir *.exe显示.exe当前目录中的所有文件、它们的大小以及它们的总大小。我很想dir在 bash 中为我的别名提供类似的功能,但我不确定如何去做。

目前,我alias dir='ls -FaGl'在我的.bash_profile, 显示

drwxr-x---+  24 mattdmo  4096 Mar 14 16:35 ./
drwxr-x--x. 256 root    12288 Apr  8 21:29 ../
-rw-------    1 mattdmo 13795 Apr  4 17:52 .bash_history
-rw-r--r--    1 mattdmo    18 May 10  2012 .bash_logout
-rw-r--r--    1 mattdmo   395 Dec  9 17:33 .bash_profile
-rw-r--r--    1 mattdmo   176 May 10  2012 .bash_profile~
-rw-r--r--    1 mattdmo   411 Dec  9 17:33 .bashrc
-rw-r--r--    1 mattdmo   124 …
Run Code Online (Sandbox Code Playgroud)

ls bash awk shell-script

94
推荐指数
6
解决办法
30万
查看次数

删除包含特定字符串的行和以下行

我用这个

cat foo.txt | sed '/bar/d'

删除bar文件中包含字符串的行。

然而,我想删除这些行和它之后的行。最好的sedawk或者其他工具,在MINGW32的可用。

这是我可以grep使用-A-B打印匹配行以及匹配行之前/之后的行的一种相反。

有什么简单的方法可以实现吗?

sed awk text-processing replace

93
推荐指数
4
解决办法
23万
查看次数

如何在 Linux 中使用 shell 脚本解析 JSON?

我有一个 JSON 输出,我需要在 Linux 中从中提取一些参数。

这是 JSON 输出:

{
        "OwnerId": "121456789127",
        "ReservationId": "r-48465168",
        "Groups": [],
        "Instances": [
            {
                "Monitoring": {
                    "State": "disabled"
                },
                "PublicDnsName": null,
                "RootDeviceType": "ebs",
                "State": {
                    "Code": 16,
                    "Name": "running"
                },
                "EbsOptimized": false,
                "LaunchTime": "2014-03-19T09:16:56.000Z",
                "PrivateIpAddress": "10.250.171.248",
                "ProductCodes": [
                    {
                        "ProductCodeId": "aacglxeowvn5hy8sznltowyqe",
                        "ProductCodeType": "marketplace"
                    }
                ],
                "VpcId": "vpc-86bab0e4",
                "StateTransitionReason": null,
                "InstanceId": "i-1234576",
                "ImageId": "ami-b7f6c5de",
                "PrivateDnsName": "ip-10-120-134-248.ec2.internal",
                "KeyName": "Test_Virginia",
                "SecurityGroups": [
                    {
                        "GroupName": "Test",
                        "GroupId": "sg-12345b"
                    }
                ],
                "ClientToken": "VYeFw1395220615808",
                "SubnetId": "subnet-12345314",
                "InstanceType": "t1.micro",
                "NetworkInterfaces": [
                    {
                        "Status": …
Run Code Online (Sandbox Code Playgroud)

sed awk text-processing json

78
推荐指数
4
解决办法
40万
查看次数

如何从cat输出中读取第一行和最后一行?

我有文本文件。任务 - 之后从文件中获取第一行和最后一行

$ cat file | grep -E "1|2|3|4" | commandtoprint

$ cat file
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

在没有 cat 输出的情况下需要这个(只有 1 和 5)。

~$ cat file | tee >(head -n 1) >(wc -l)
1
2
3
4
5
5
1
Run Code Online (Sandbox Code Playgroud)

也许存在 awk 和更短的解决方案......

shell grep bash sed awk

76
推荐指数
7
解决办法
23万
查看次数

将 shell 变量作为 /pattern/ 传递给 awk

在我的 shell 函数之一中具有以下内容:

function _process () {
  awk -v l="$line" '
  BEGIN {p=0}
  /'"$1"'/ {p=1}
  END{ if(p) print l >> "outfile.txt" }
  '
}
Run Code Online (Sandbox Code Playgroud)

,所以当被称为 as 时_process $arg$arg会被传递为$1,并用作搜索模式。它是这样工作的,因为 shell 扩展$1代替了 awk 模式!也l可以在 awk 程序中使用,用-v l="$line". 一切都很好。

是否可以以相同的方式将模式作为变量进行搜索?

以下将不起作用,

awk -v l="$line" -v search="$pattern" '
  BEGIN {p=0}
  /search/ {p=1}
  END{ if(p) print l >> "outfile.txt" }
  '
Run Code Online (Sandbox Code Playgroud)

, 因为 awk 不会解释/search/为变量,而是按字面意思解释。

shell awk quoting variable

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

如何使用 shell 命令仅显示文本文件中的第一列和最后一列?

我需要一些帮助来弄清楚如何使用 sed 命令仅显示文本文件中的第一列和最后一列。这是我到目前为止对第 1 列的内容:

cat logfile | sed 's/\|/ /'|awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

我试图让最后一列也显示出来的尝试是:

cat logfile | sed 's/\|/ /'|awk '{print $1}{print $8}'
Run Code Online (Sandbox Code Playgroud)

但是,这需要第一列和最后一列并将它们合并到一个列表中。有没有办法用 sed 和 awk 命令清楚地打印第一列和最后一列?

样本输入:

foo|dog|cat|mouse|lion|ox|tiger|bar
Run Code Online (Sandbox Code Playgroud)

shell sed awk

69
推荐指数
4
解决办法
33万
查看次数

根据行号替换字符串

我有一种情况,我想替换许多文件中的特定字符串

将字符串AAA替换为另一个字符串BBB,但有很多字符串以 AAA 开头或以 AAA 结尾,我只想替换第 34 行中的一个并保持其他字符串完好无损。

是否可以按行号指定,在所有文件上,这个字符串正好在第 34 行。

sed awk

68
推荐指数
1
解决办法
18万
查看次数

标签 统计

awk ×10

sed ×7

shell ×3

text-processing ×3

bash ×2

grep ×2

json ×1

ls ×1

perl ×1

quoting ×1

replace ×1

shell-script ×1

variable ×1