Questions tagged «sed»

sed是用于过滤和转换文本的命令行流编辑器。

5
使用标准命令行工具解析命令输出中的所有IP地址
我有几个包含一堆IP地址的日志文件。我希望能够通过程序来匹配和解析IP地址,从而传递数据。 IE cat / var / log / somelogfile | 主办 这会变成一条线 10:13被10.13.13.10访问 进入 由myhostname.intranet访问的10:45 我的想法是将sed和host结合使用可能有一种方法,但是我不知道该怎么做。我知道我可以编写一个简单的脚本来做到这一点,但我宁愿能够使用内置工具。有什么建议么?

6
如何将制表符分隔的数据转换为逗号分隔的数据?
我通过亚马逊的ec2命令行工具请求ec2快照列表: ec2-describe-snapshots -H --hide-tags > snapshots.csv 数据看起来像这样: SnapshotId VolumeId StartTime OwnerId VolumeSize Description snap-00b66464 vol-b99a38d0 2012-01-05 5098939 160 my backup 我如何在将数据重定向到之前拦截数据snapshots.csv并执行以下操作: 用逗号替换“制表符” 用引号封装值 如果值是全数字,请在=其前面加上一个前缀,以便excel将其视为文本-例如OwnerId应为"=5098939“(如果不能内联完成则不需要此,而是需要脚本文件或函数) 所需的输出: "SnapshotId","VolumeId","StartTime","OwnerId","VolumeSize","Description" "snap-00b66464","vol-b99a38d0","2012-01-05","=5098939","=160","my backup"

3
如何通过一个表达式用一个单词搜索和替换多根针?
假设您有一个文本文件: foo fnord bar bizz foo poit 现在,我想将“ foo”和“ bar”都替换为“ narf”。 我知道我可以使用: sed -e 's/foo/narf/g' -e 's/bar/narf/g' fileName 但是,我想使用一个OR运算符,该运算符告诉正则表达式通过一个表达式匹配两个指针。 我打了一些手册,我认为管子应该符合我的需求,但是我尝试了 sed -e 's/foo|bar/narf/g' -i fileName 它没有用,甚至没有抛出错误。 我在这里做错了什么?

2
重击颜色输出失败
是sed还是echo问题?我做错了什么? $> cat ~/bin/color_test.sh #!/bin/bash ColorOff='\e[0m' # Text Reset BWhite='\e[1;37m' # Bold White string="test TEST test" echo -e "$string" | sed -e "s/TEST/${BWhite}TEST${ColorOff}/g" $> ~/bin/color_test.sh test e[1;37mTESTe[0m test 期望以粗体突出显示TEST。
8 bash  sed  quoting 


3
Sed反转两个字
echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\) \(.*\)/ \2 \1/' 我期望的输出是/usr/local/Axis2C AXIS2C_HOME=。 我不知道自己在做什么错。:(
8 sed 

4
使用正则表达式(shell脚本)复制/重命名多个文件
我有一组与“ assignment02.cc”,“ assignment02.h”,“ assignment02.txt”等模式匹配的文件。我想将这些文件复制/重命名为“ assignment03.cc”,“ assignment03”。 h”,“ assignment03.txt”等。 我怀疑应该使用Shell脚本并sed来实现。到目前为止,我有: OLD_NO=$1 NEW_NO=$2 echo "Moving from $OLD_NO to $NEW_NO" for name in assignment$OLD_NO.* ; do newname=$(echo $name | sed 's/\(.*\)$OLD_NO\(.*\)/\1xx$NEW_NO\2/') echo "$name -> $newname" # mv -v $name $newname done 不幸的是,我调用sed的方式总是返回输入字符串$name,而实际上并没有进行正则表达式查找/替换。 注意:在Internet上有一个rename具有此功能的命令,但该命令在我的MacBook上不可用。

3
sed输出如何像printf的格式化打印一样格式化?
sed可以用类似于printf的格式化打印格式的字符串替换文本吗? 以下sed命令用变量中指定的多个值替换以“ $ domain”的当前值开头的行。 /bin/sed "s/\(^${domain} *${limittype} * ${limititem}.*\)/$EXPL#\1\n${domain} ${limittype} ${limititem} ${value}/" /etc/security/limits.conf 但是,由于domain等的值的长度不同,因此无法正确对齐输出。 因此输出将类似于 #oracle hard nproc 131072 oracle hard nproc 666 虽然有效,但很难阅读。我宁愿得到像 #oracle hard nproc 131072 oracle hard nproc 666 我可以拿到的最好的输出是: /bin/sed "s/\(^${domain}\)\( *\)\(${limittype}\)\( *\)\(${limititem}\)\( *\)\(.*\)/$EXPL#\1\2\3\4\5\6\7\n${domain}\2${limittype}\4${limititem}\6${value}/" /etc/security/limits.conf 但是我相信必须有一种更优雅的方法来做到这一点。 所述sed的一个衬里文件包含一些实例中使用指定数目的字符,例如 sed -e :a -e 's/^.\{1,78\}$/ &/;ta' # set at …

3
提取与另一个文件中的单词列表匹配的行
我有以下行的文件1: ATM 1434.972183 BMPR2 10762.78192 BMPR2 10762.78192 BMPR2 1469.14535 BMPR2 1469.14535 BMPR2 1738.479639 BMS1 4907.841667 BMS1 4907.841667 BMS1 880.4532628 BMS1 880.4532628 BMS1P17 1249.75 BMS1P17 1249.75 BMS1P17 1606.821429 BMS1P17 1606.821429 BMS1P17 1666.333333 BMS1P17 1666.333333 BMS1P17 2108.460317 BMS1P17 2108 文件2包含单词列表: ATM BMS1 因此,输出将如下所示: ATM 1434.972183 BMS1 4907.841667 BMS1 4907.841667 BMS1 880.4532628 BMS1 …

1
替换File1中的模式,并用File2中相应的匹配模式+列替换
我研究了许多类似的问答,但仍然停留在解决方案上。 我有2个档案。 文件1 cow aaaaa brown bbbbb often ccccc farts ddddd 文件2 在File2中,以“ space”作为分隔符,然后输入col 1 =“ brown”和col2 =“ 149,456,foo”。另外,File1和File2的顺序不同(排序在这里不起作用,我想依靠匹配的键进行替换)。 brown 149,456,foo cow 192,231,bar farts 81,2007,tip often 427,541,top 我想创建File3 cow 192,231,bar aaaaa brown 149,456,foo bbbbb often 427,541,top ccccc farts 81,2007,tip ddddd 换句话说,记下column1-in-File2(棕色)并在File1中搜索它。在File1中找到该匹配项后,请将匹配项替换为相应File2的整行(棕色149,456,foo)。 我已经试过了: $ awk 'NR==FNR{a[NR]=$0;next}{$6=a[FNR]}1' file2 file1 但是结果似乎占用了每个row1,然后将其与其他文件中的row1一起打印,不涉及匹配/替换。 brown brown …
1 awk  sed 

5
如何grep / awk / sed随机模式
我有一个尝试从中拉出字符串的日志文件。数字字符串是随机生成的,到目前为止,我使用grep / sed / awk的所有尝试均未成功。 我有一个类似以下的条目: "id":"30c962de-b448-40ac-ade8-da6a8f49ce88","title": 我想解析的是随机生成的 30c962de-b448-40ac-ade8-da6a8f49ce88 任何人都有快速而肮脏的方法来使它起作用吗?
awk  sed  grep 


3
在包含数千列的文件中乘以特定列
in文件看起来像这样 -17.3644 0.00000000 0.00000000 .... -17.2703 0.00000000 0.00000000 .... -17.1761 0.00000000 0.00000000 .... -16.5173 0.00000000 0.00000000 .... -16.4232 0.00000000 0.00000000 .... 期望输出应为 -173.644 0.00000000 0.00000000 .... -172.703 0.00000000 0.00000000 .... -171.761 0.00000000 0.00000000 .... -165.173 0.00000000 0.00000000 .... -164.232 0.00000000 0.00000000 .... 所以我想将第一列乘以10,但同时还要保留其他1000列。与awk '{print $1*10}' infile > outfile您只打印第一列,我怎么能还保持其他列?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.