文件1.TXT
0020220101
或
20220101年1月
需要从文本从2开始的文件中添加额外的日期部分
已尝试的选项:
t_FILE_DT1='awk -F"2" '{PRINT $NF}' FILE1.TXT'
t_FILE_DT2='cut -d'2' -f2- FILE1.TXT'
echo "$t_FILE_DT1"
echo "$t_FILE_DT2"
第一次输出:0101
第二输出:0220101
预期输出:20220101年
我是Linux脚本的新手,有人能帮我指导我哪里出错吗?
5条答案
按热度按时间wpx232ag1#
grep
的用法如下:在这里,GNU
grep
使用以下选项:-P
:使用Perl正则表达式。-o
:仅打印匹配项(每行1个匹配项),而不是整行。另请参阅:
grep
manualperlre - Perl regular expressions
gorkyyrv2#
使用任何awk:
以上是在此输入文件上运行的:
关于你的问题中的
PRINT $NF
-PRINT
!=print
。摆脱使用全大写的习惯,除非你在写Cobol。请参阅correct-bash-and-shell-script-variable-capitalization了解一些原因。脚本中的
2
告诉awka和cut使用字符2
作为字段分隔符,这样每个字符串都会在出现2
的地方将输入划分为子字符串。您的问题中的
'
是单引号,用于使字符串成为文字,您打算使用反勾号cmd
,但无论如何,这些都是不赞成使用的,而赞成使用$(cmd)
。bfrts1fy3#
我会在2 ...之后寻找“(不用担心是否也有空间))
相反,想想提取最后8个字符,你知道事实上是你的日期。
dldeef674#
关于您尝试的cut和awk命令:
使用
awk -F"2" '{PRINT $NF}' file
会将字段分隔符设置为2,并且$NF
是最后一个字段,因此打印最后一个字段的值为0101
使用
cut -d'2' -f2- file
时也使用分隔符2,然后从第二个字段0220101
开始打印所有字段如果要匹配2后面跟着7位数字直到字符串的末尾:
输出量
i2loujxw5#
可接受的答案显示了如何提取前八位数字,但这不是您所要求的。
将从第一次出现的2中提取,并且
将提取每次出现2后的所有数字。如果您特别想要八位数字,请尝试
如果您只想接受两个单词边界之间的匹配,也可以使用
-w
选项。如果您特别希望只接受第一次出现2之后的数字,可以尝试