根据某些搜索条件替换文件中的字符串是一项非常常见的任务。我怎样才能
foo用bar在当前目录下的所有文件?我已经成为 Linux 用户有一段时间了,我对大多数常见的命令行实用程序有相当不错的了解。然而,那些上来,再次相对于编程是grep,awk和sed。
关于我使用 grep 的唯一目的是将内容输送到它以查找日志文件中的文件、输出ps等。我没有使用过awk或根本没有使用sed过。这些实用程序有什么好的教程吗?
我正在尝试使用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) 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) 我用这个
cat foo.txt | sed '/bar/d'
删除bar文件中包含字符串的行。
然而,我想删除这些行和它之后的行。最好的sed,awk或者其他工具,在MINGW32的可用。
这是我可以grep使用-A并-B打印匹配行以及匹配行之前/之后的行的一种相反。
有什么简单的方法可以实现吗?
我有一个 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) 我有文本文件。任务 - 之后从文件中获取第一行和最后一行
$ 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 函数之一中具有以下内容:
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/为变量,而是按字面意思解释。
我需要一些帮助来弄清楚如何使用 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) 我有一种情况,我想替换许多文件中的特定字符串
将字符串AAA替换为另一个字符串BBB,但有很多字符串以 AAA 开头或以 AAA 结尾,我只想替换第 34 行中的一个并保持其他字符串完好无损。
是否可以按行号指定,在所有文件上,这个字符串正好在第 34 行。