小编mx0*_*mx0的帖子

grep --color=auto 在 ^M 处于彩色匹配中时中断

我有 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 文件)?

grep colors

5
推荐指数
1
解决办法
983
查看次数

从存储为文件名的日期设置文件修改日期

我有很多文件,其中文件名包含文件创建日期 ( 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)

返回

触摸:无效的日期格式“.”

find awk date files touch

1
推荐指数
1
解决办法
984
查看次数

标签 统计

awk ×1

colors ×1

date ×1

files ×1

find ×1

grep ×1

touch ×1