我有一个带有不同字符串的打印文件,打印机将其用于在打印表单上放置字段。这些字段之一具有星期/天标识符,但我想用日期名称的文本代替。
我可以提取该行并通过脚本对其进行修改,但这似乎并不是最好的方法,并且文件中可能存在多个条目,所以我希望有一种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"
答案 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
,这些方法可以找到行首匹配项然后进行替换。