【发布时间】:2021-08-12 17:52:41
【问题描述】:
这是一个复杂的问题。我要全部换掉?在带有 X 的文件中。但问题是有一些有效的?也在输入文件中。
例如:
输入:
HELLO ?, WELCOME TO THE NEW WORLD??23, and you are most ? valid person.
输出:
HELLO X, WELCOME TO THE NEW WORLDX?23, and you are most X valid person.
这里,?在 23 之前是有效的 .. 像 23 一样,有很多值。 ?24、?33、?45等,
我尝试使用 sed 脚本,但能够找到确切的命令。
我使用的脚本:
LINE_NUM=0
while IFS= read -r LINE
do
LINE_NUM=$?
EXTRACTED=`echo "${LINE}" |grep '?23' | sed 's|^.*\?23||; s|\?[0-9].*$||'`
if [ -n "$EXTRACTED" ]
then
UPDATED=`echo "$EXTRACTED" | sed 's/?/X/g'`
UPDATED_1=`echo "$UPDATED" | awk '{gsub("/","%",$0); print}'`
if [ $EXTRACTED != $UPDATED ]
then
LATEST_VALUE=`echo "${LINE}" | sed "s|${EXTRACTED}|${UPDATED}|g"`
fi
LATEST_VALUE=`echo "${LINE}"`
echo "$LATEST_VALUE" >> outputfile.txt
else
echo "$LINE" >> outputfile.txt
fi
done<inputfile.txt
【问题讨论】:
-
欢迎来到 SO,请在您的问题中以代码的形式添加您的努力,这在 SO 上受到强烈鼓励,谢谢。
-
@RavinderSingh13 发布了我开发的脚本
-
请将您的脚本复制/粘贴到shellcheck.net 并修复它会告诉您的所有问题。还要阅读why-is-using-a-shell-loop-to-process-text-considered-bad-practice,因为根本不编写外壳读取循环来执行此操作。
-
您需要能够用英语定义哪些是有效的,哪些是无效的。然后就可以写代码解决问题了。