grep相关的问题

假若目前有一个windows下拷贝过来的文件 favorite_songs(喜欢的歌曲单,内部是 CRLF 结尾的),现在还有一个文件 music_list(内部包含所有歌曲的路径,非 CRLF 结尾),现在想将所有的 favorite songs 拷贝到一个单独的 favorite_dir 目录。可以使用下面的命令来完成:$cat favorite_songs | xargs -i grep {} music_list | xargs -i cp {} favorite_dir,但是运行时不会得到你所期望的结果,仔细调试便会发现 CRLF 在搞鬼,将其转换成 unix 下的 LF 结尾即可,转换的方法可以使用如下三种中的一种:

1. 使用命令dos2unix和unix2dos

2. 用vim打开输入命令::% s/\r//g

3. tr -d '\r' < dos-file.txt > UNIX-file.txt

此需求另外需要注意的问题是,windows下的文件名好多都包含空格的,可以使用 tr 命令将其转换为下划线以方便处理;另一个问题是 xargs 处理包含引号的文件名时也会出现问题,可以加 -0 参数,或者使用 $cat file | while read  的方式,或者彻底一点使用 tr 将文件改名。

posted @ 2014-06-20 19:40  lian4187  阅读(394)  评论(0编辑  收藏  举报