我有一个文件Function listWeekday(dt As Long, ndx As Long, _
Optional wd As Long = 6)
listWeekday = 7 - Weekday(DateSerial(Year(dt), Month(dt), 0), wd) + _
DateSerial(Year(dt), Month(dt), 1) + _
(ndx - 1) * 7
If Month(dt) <> Month(listWeekday) Then _
listWeekday = CVErr(xlErrNA)
End Function
'usage for Fridays in current month
=listWeekday(today(), row(1:1))
'usage for Sundays in current month
=listWeekday(today(), row(1:1), 1)
'usage for Wednesdays in current month
=listWeekday(today(), row(1:1), 4)
,内容如下:
teste.txt
我执行命令
02183101399205000 GBTD9VBYMBQ 04455927964
02183101409310000 XBQMPL1C93B 27699484827
54183101003651000 1WFG3SNVDG9 71530894204
结果是:
sed -e 's/^\(.\{18\}\)[0-9]/\1#/g' teste.txt
仅第3行中的第19位从02183101399205000 GBTD9VBYMBQ 04455927964
02183101409310000 XBQMPL1C93B 27699484827
54183101003651000 #WFG3SNVDG9 71530894204
更改为1
。
我想知道如何将所有数字字符从19位更改为30位。
预期结果是:
#
答案 0 :(得分:1)
用于完成目标的awk命令:
awk '{ gsub(/[0-9]/,"#",$2); print }' teste.txt
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed -r 's/./&\n/30;s//\n&/19;h;s/[0-9]/#/g;H;x;s/\n.*\n(.*)\n.*\n(.*)\n.*/\2\1/' file
将字符串从19到30的字符用换行符括起来并进行复制。将所有数字替换为#
。将此字符串附加到原始字符串上,并使用模式匹配对字符串进行重新排列,以形成一个新字符串,在更改部分的两边都具有未更改的部分,同时丢弃引入的换行符。
一种替代方法,利用字段之间用空格分隔的事实:
sed -r ':a;s/( \S*)[0-9](\S* )/\1#\2/;ta' file
实际上,这两种方法可以结合使用:
sed -r 's/./&\n/30;s//\n&/19;:a;s/(\n.*)[0-9](.*\n)/\1#\2/;ta;s/\n//g' file