bash:读取文本文件并删除特定字符(如果存在)

时间:2018-12-16 12:07:01

标签: bash awk sed grep

我尝试摆脱URL中的最后一个斜杠,但前提是该斜杠存在。 有任何想法吗?

tail -1 /var/script/string.txt | grep -oP '(?<=expanded_url":")[^"]+'

响应:

https://research.checkpoint.com/ramnits-network-proxy-servers/

所需的输出:

https://research.checkpoint.com/ramnits-network-proxy-servers

2 个答案:

答案 0 :(得分:1)

如果您对awk没问题,也可以尝试遵循。

var="https://research.checkpoint.com/ramnits-network-proxy-servers/"
echo $var | awk '{sub(/\/$/,"")} 1'

说明: 现在为上述代码添加说明,仅用于说明目的。

var="https://research.checkpoint.com/ramnits-network-proxy-servers/"    ##Creating a variable in shell which has value as OP mentioned.
echo $var | awk '{sub(/\/$/,"")} 1'         ##Sending echo output to awk command here. In awk command using sub to substitute / which comes in end of line with NULL.
                                            ##awk works on method of condition and action, so mentioning 1 is making condition TRUE and not mentioning any action so by default
                                            ##Printing of line/variable value will happen.

EDIT: :看到您尝试在此处添加1个解决方案来避免许多命令组合的尝试(这将只读取Input_file的最后一行,然后退出命令因为我已经在其中放入了exit

tac Input_file | awk 'FNR==1 && /xpanded_url\":\"/{sub(/\/$/,"");print;exit}'

EDIT2: 在此处添加单个awk命令,在某些awk的{​​{1}}块中,我们无法最后获取我们可以添加两种解决方案,以适合人们的情况。

END

答案 1 :(得分:1)

您可以使用负的前行ConfigureAwait来检查右边的内容不是可选的正斜杠,后跟双引号。如果不是这种情况,请使用任意字符并重复1次以上。

请参见regex demo

例如:

(?:(?!/?").)+

结果

echo 'expanded_url":"https://research.checkpoint.com/ramnits-network-proxy-servers/"' | grep -oP '(?<=expanded_url":")(?:(?!/?").)+'