通过 grep/awk/cut 删除字符串中的多余点
Posted
技术标签:
【中文标题】通过 grep/awk/cut 删除字符串中的多余点【英文标题】:Remove extra dot in a String by grep/awk/cut 【发布时间】:2021-10-09 19:29:19 【问题描述】:我在一个文件中有以下文本,例如 output.txt
[test.tracking_utils] INFO: Tracking subtool usage: main_test
[TEST & SPEC] INFO: Uploaded file test.zip with bucket URI test/20210804144418.zip.
如何使用 grep o 类似的东西来获取 test/20210804144418.zip
的值?
我试过了
tail output.txt | grep ". test/" | awk print $NF
tail output.txt | grep -m1 .test/ | rev | cut -d' ' -f1 | rev
它返回test/20210804144418.zip.
和额外的.
你知道如何在最后删除额外的.
吗?有什么建议吗?
【问题讨论】:
生成output.txt
的脚本是什么样的?是可以更改的脚本吗?
【参考方案1】:
使用awk
,您可以尝试关注一次。
awk '/test\//sub(/\.$/,"");print $(NF);exit' Input_file
第二个解决方案:在这里使用awk
的match
函数。
awk 'match($0,/URI test\/[0-9]+\.zip/)print substr($0,RSTART+4,RLENGTH-4);exit' Input_file
【讨论】:
【参考方案2】:你可以使用这个grep
:
grep -oE -m1 'test/[^[:blank:]]+\.[^.]+' file
test/20210804144418.zip
正则表达式详细信息:
test/
:匹配test/
[^[:blank:]]+
:匹配 1+ 个非空白字符
\.
:匹配一个点
[^.]+
: 匹配 1+ 个非点字符
【讨论】:
【参考方案3】:您可以通过管道删除尾随 .
sed 's/\.$//'
但在这种情况下,这可能不是必需的。使用 GNU grep
或 pcregrep
,您可以直接提取路径:
grep -Po 'with bucket URI \K.*(?=.)'
【讨论】:
【参考方案4】:假设:
所需输出/字符串的开头不一定以test
开头
具有所需字符串的所有行都包含with bucket URI
感兴趣的字符串始终是最后一个字段(以空格分隔)
可能有不止一条感兴趣的线
示例输入:
$ cat output.txt
[test.tracking_utils] INFO: Tracking subtool usage: main_test
[TEST & SPEC] INFO: Uploaded file test.zip with bucket URI test/20210804144418.zip.
[test.tracking_utils] INFO: Tracking subtool usage: main_test
[TEST & SPEC] INFO: Uploaded file test.zip with bucket URI other/101423412.pre.zip.
一对awk
想法:
awk '/with bucket URI/sub(/\.$/,"",$NF);print $NF' output.txt
awk '/with bucket URI/print substr($NF,1,length($NF)-1)' output.txt
这两个生成:
test/20210804144418.zip
other/101423412.pre.zip
【讨论】:
【参考方案5】:grep
grep -o '[a-z]*\/[0-9].*\.[a-z]*\b'
sed
sed -n 's/^.*\s\([a-z]*\/[0-9].*\.[a-z]*\)./\1/p'
awk
awk '/\d+.[a-z]*/print $NF' | sed 's/\.//2'
cut
cut -d' ' -f11 | sed 's/\.//2'
所有命令都应该产生您预期的输出。
$ sed -n 's/^.*\s\([a-z]*\/[0-9].*\.[a-z]*\b\)./\1/p'
test/20210804144418.zip
【讨论】:
以上是关于通过 grep/awk/cut 删除字符串中的多余点的主要内容,如果未能解决你的问题,请参考以下文章
通过删除 Laravel 中的多余字符,从斜杠分隔的 url 中提取参数值