通过 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

第二个解决方案:在这里使用awkmatch函数。

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 greppcregrep,您可以直接提取路径:

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 中提取参数值

在 Python 中删除字符串中的多余字符

如何从 Postgres 中的字符串中删除 '\t'、'\n' 或多余的空格?

编程去掉字符串中的多余空格

C语言删除多余字符

怎么用python删除CSV中字符串多余的空格?