只需要更改文件中以字符串开头的某些行,还可以更改该行的一部分

时间:2019-05-13 09:19:44

标签: bash shell scripting

我有一个带有不同字符串的打印文件,打印机将其用于在打印表单上放置字段。这些字段之一具有星期/天标识符,但我想用日期名称的文本代替。

我可以提取该行并通过脚本对其进行修改,但这似乎并不是最好的方法,并且文件中可能存在多个条目,所以我希望有一种SED解决方案

该脚本有望解释我的工作-

DAYNO=`cat sedtest.txt |sed -n -e '/^\r~AF63/p'|cut -c 12`

case $DAYNO in
1) DAYTX="\"MON\""
;;
2) DAYTX="\"TUE\""
;;
3) DAYTX="\"WED\"" 
;;
4) DAYTX="\"THU\""
;;
5) DAYTX="\"FRI\""
;;
*) DAYTX="\"XXX\""
;;
esac

LINE63=`cat sedtest.txt |sed -n -e '/^\r~AF63/p'|awk -F '"' '{print $1 }'`
LINE63FIN="$LINE63$DAYTX"

1 个答案:

答案 0 :(得分:0)

您是说您已经将星期几作为数字0-6(或1-7或其他数字)吗?您不需要转换日期吗?这很容易。也许sed 可以帮助您!

Sed可以采用多种搜索/替换方式,因此您只需简单地查找一周中的每一天。

顺便说一句,仅使用cat来避免<并不是一个好主意,同时使用其他工具(例如cut)只会使其变得更加复杂。

就个人而言,在容易做到的时候,我坚持使用search / replace和regex。因此,我们将cut -c 12替换为一个正则表达式,它将捕获前11个不变的字符并选择第12个字符。当然,这遵循6个字符的序列\r~AF63,因此仅剩下5个字符。我不会问为什么第一个字符是回车符。现在就开始做一周的前两天吧,您可以悠闲地进行扩展:

sed -e '/^(\r~AF63.{5,5})(1)/\1MON/' -e '/^(\r~AF63.{5,5})(2)/\1TUE/'  sedtest.txt

当然,还有许多其他方法可以驱动sed,这些方法可以找到行首匹配项然后进行替换。