我有 2 个类似的文件(dos.txt 和 unix.txt),其中的文本The quick brown fox jumps\n over the lazy dog.
因行尾而异。当我在行尾搜索单词时,dos.txt 的输出为空:
$ grep -E 'jumps^M?$' dos.txt unix.txt
unix.txt:The quick brown fox jumps
Run Code Online (Sandbox Code Playgroud)
Grep 找到了一些东西,但没有打印出来。grep 的实际输出如下所示:
$ grep -E --color=always 'jumps^M?$' dos.txt unix.txt | cat -v
^[[35m^[[Kdos.txt^[[m^[[K^[[36m^[[K:^[[m^[[KThe ... ^[[01;31m^[[Kjumps^M^[[m^[[K
^[[35m^[[Kunix.txt^[[m^[[K^[[36m^[[K:^[[m^[[KThe ... ^[[01;31m^[[Kjumps^[[m^[[K
Run Code Online (Sandbox Code Playgroud)
所以看起来唯一的区别是 ^M 在彩色输出里面,它会导致整行消失。我该如何解决这个问题(不使用 dos2unix 或类似工具转换 dos 文件)?
我有很多文件,其中文件名包含文件创建日期 ( IMG_RRRRMMDD_hhmmss.jpg
):
IMG_20171015_133516.jpg
IMG_20171015_133827.jpg
IMG_20171015_142634.jpg
IMG_20171015_142834.jpg
IMG_20171015_142857.jpg
Run Code Online (Sandbox Code Playgroud)
但实际文件创建日期不同。我需要将它从文件名设置回日期。
我知道如何将所有文件的日期更改为当前日期:
find -type f -exec touch {} \;
Run Code Online (Sandbox Code Playgroud)
以及如何解析文件名以获取正确格式的日期 touch -t
echo IMG_20171015_133516.jpg | awk -F_ '{print $2 substr($3,0,4) "." substr($3,5,2)}'
201710151335.16
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将这些命令组合在一起来更改所有文件。
find -type f -exec touch -t"$(echo '{}' | awk -F_ '{print $2 substr($3,0,4) "." substr($3,5,2)}')" {} \;
Run Code Online (Sandbox Code Playgroud)
返回
触摸:无效的日期格式“.”