我有一个要在awk中子字符串化的字符串(或剪切或sed,无论如何)。
但是我想维护字段分隔符。
该文件在字段分隔符之后具有完全随机数量的垃圾,随机数量的字符。
例如
Dogs.pgp.123sda
Dogs.pgpsjaksdasdasdaw
Dogs.pgp-asasdawad2
我希望所有三个输出为:
狗狗
显然,这里的公共字段是“ .pgp”,但是标准awk总是删除字段分隔符。
'{sub(/.pgp.*/,""); print}'
或者
awk -F".PGP." '{print $1}'
有没有办法维护分隔符?
for string in Dogs.pgp.123sda Dogs.pgpsjaksdasdasdaw Dogs.pgp-asasdawad2
do
printf '%s --> %s\n' "$string" "${string%${string#*.???}}"
done
输出:
Dogs.pgp.123sda --> Dogs.pgp
Dogs.pgpsjaksdasdasdaw --> Dogs.pgp
Dogs.pgp-asasdawad2 --> Dogs.pgp
循环遍历三个字符串。在循环的主体中,原始字符串与转换后的字符串一起打印。
通过除去字符串中第一个点之前的部分和该点之后的三个字符,除去所有内容,从而对字符串进行转换。
首先确定要从原始字符串中删除的内容。这是${string#*.???}
,即删除了第一个点和另外三个字符之后的字符串的其余部分。然后通过删除字符串末尾的内容${string%${string#*.???}}
。
如果循环遍历匹配例如的文件名*.pgp*
,则这还将处理文件名包含换行符的情况。唯一会使上面的转换混乱的是.pgp
子字符串前面是否有点,但是您可以通过.pgp
显式匹配而不是.???
:
for fname in *.pgp*
do
printf '%s --> %s\n' "$fname" "${fname%${fname#*.pgp}}"
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句