【发布时间】:2020-02-24 04:08:08
【问题描述】:
我有一个逗号分隔值的字符串,例如:
742108,SOME-STRING_A_-BLAHBLAH_1-4MP0RTTYE,SOME-STRING_A_-BLAHBLAH_1-4MP0-,,,
如您所见,第 3 个逗号分隔值最后有时会包含特殊字符,例如破折号 (-)。我想使用 sed,或者最好是 perl 命令来替换这个字符串(使用 -i 选项,以便在现有文件中替换),在同一个地方使用相同的字符串(即第三个逗号分隔值)但没有特殊字符(就像字符串末尾的破折号 (-))。因此,上面示例字符串的结果应该是:
742108,SOME-STRING_A_-BLAHBLAH_1-4MP0RTTYE,SOME-STRING_A_-BLAHBLAH_1-4MP0,,,
由于像上面这样的多行在一个文件中,我在 shell/bash 脚本中使用 while 循环来循环和操作文件的所有行。并且我已经将上述字符串值分配给变量,以便使用 perl 替换它们。所以,我的while循环是:
while read mystr
do
myNEWstr=$(echo $mystr | sed s/[_.-]$// | sed s/[__]$// | sed s/[_.-]$//)
perl -pi -e "s/\b$mystr\b/$myNEWstr/g" myFinalFile.txt
done < myInputFile.txt
地点:
$mystr is the "SOME-STRING_A_-BLAHBLAH_1-4MP0-"
$myNEWstr result is the "SOME-STRING_A_-BLAHBLAH_1-4MP0"
请注意,myInputFile.txt 是一个文件,其中包含 myFinalFile.txt 的第三个逗号分隔值,因此最后会检查那些 EXACT 字符串值 ($mystr) 是否有特殊字符,例如下划线、破折号、点,双下划线,如果它们存在要删除并形成新字符串($myNEWstr),那么最后在 myFinalFile.txt 中替换新字符串($myNEWstr),这样得到的字符串就像上面显示的示例最终字符串,即第三个逗号分隔的子字符串值末尾没有特殊字符(在上面的示例中为破折号 (-))。
谢谢。
【问题讨论】:
标签: string perl sed replace hp-ux