我有一个非常具体的要求,我发现很难做,我需要找到并替换文件中的某些行,但问题是文本不同,唯一的好处是它们都有。[扩展名]
例如:
30/07/2012 14:46 17,232 training program.DOCX.ddkhqvh
08/03/2011 20:57 31,664 nutritional program.XLS.ddkhqvh
需要:
F:/home/training program.DOCX.ddkhqvh
F:/home/nutritional program.XLS.ddkhqvh
我试着用awk但是我把头发拉了出来。
答案 0 :(得分:2)
这个怎么样:
$ awk '/^[0-9]+\/[0-9]+\/[0-9]+/ { sub(/^[^ ]+ +[^ ]+ +[^ ]+ +/,"F:/home/"); print; }' <file.txt
F:/home/ALLERGAN Recruitment tracking sheet Template.XLS.ddkhqvh
F:/home/Holding Letter 15May12.DOCX.ddkhqvh
F:/home/Amgen DBMS 2nd Mailing part 1 - Griifin Request Form.DOCX.ddkhqvh
F:/home/Amgen DBMS 2nd Mailing part 2 - Griifin Request Form.DOCX.ddkhqvh
F:/home/Database Letter, Reply Slip, 20070337, AMGXXXOST337,draft version 1, 19.03.12.DOC.ddkhqvh
F:/home/Previous DXA ladies 25.05.12.DOCX.ddkhqvh
F:/home/GP Letter, 20070337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/End of Study Thank You Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/GP Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/Interim Thank you letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/Welcome Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/End of Study Thank You Letter,20070337, AMGXXXOST337, Version 1 Draft, 9th Feb 2012.DOC.ddkhqvh
F:/home/GP Letter,20070337, AMGXXXOST337, Version 1 Draft, 9th Feb 2012.DOC.ddkhqvh
F:/home/Interim Thank you letter,20070337, AMGXXXOST337, Version 1 Draft, 9th Feb 2012.DOC.ddkhqvh
F:/home/Welcome Letter, 20070337, AMGXXXOST337, Version 1 Draft, 9th Feb 2012.DOC.ddkhqvh
F:/home/End of Study Thank You Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/example GPMS.DOC.ddkhqvh
F:/home/GP Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/Interim Thank you letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/Welcome Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/A5 EDUCATION LUNCH POSTERS - CAMPAIGN CODES.DOC.ddkhqvh
F:/home/Multiple choice Questionaire - Merseyside 26th Jan 2011.DOC.ddkhqvh
F:/home/Multiple choice Questionaire - Scotland 26th Jan 2011.DOC.ddkhqvh
F:/home/Multiple choice Questionaire - Wales 26th Jan 2011.DOC.ddkhqvh
F:/home/Multiple choice Questionaire Template 26th Jan 2011.DOC.ddkhqvh
这样只会获取文件中包含初始日期的行,因此只会修改文件中列出的文件名。
答案 1 :(得分:1)
这应该做:
awk '/\.[[:alpha:]]+$/ {$1=$2=$3="";sub(/^ */,"F:/home/");print}' file
F:/home/ALLERGAN Recruitment tracking sheet Template.XLS.ddkhqvh
F:/home/Holding Letter 15May12.DOCX.ddkhqvh
F:/home/Amgen DBMS 2nd Mailing part 1 - Griifin Request Form.DOCX.ddkhqvh
F:/home/Amgen DBMS 2nd Mailing part 2 - Griifin Request Form.DOCX.ddkhqvh
F:/home/Database Letter, Reply Slip, 20070337, AMGXXXOST337,draft version 1, 19.03.12.DOC.ddkhqvh
F:/home/Previous DXA ladies 25.05.12.DOCX.ddkhqvh
F:/home/GP Letter, 20070337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/End of Study Thank You Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/GP Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/Interim Thank you letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/Welcome Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
F:/home/End of Study Thank You Letter,20070337, AMGXXXOST337, Version 1 Draft, 9th Feb 2012.DOC.ddkhqvh
F:/home/GP Letter,20070337, AMGXXXOST337, Version 1 Draft, 9th Feb 2012.DOC.ddkhqvh
F:/home/Interim Thank you letter,20070337, AMGXXXOST337, Version 1 Draft, 9th Feb 2012.DOC.ddkhqvh
F:/home/Welcome Letter, 20070337, AMGXXXOST337, Version 1 Draft, 9th Feb 2012.DOC.ddkhqvh
F:/home/End of Study Thank You Letter, 20070337, AMGXXXOST337, Version 1, 16.02.12.DOC.ddkhqvh
如果行以.text
结尾,则会更改路径。它删除了第一个三个字段并添加了路径。
答案 2 :(得分:0)
awk '{print "f:/home/"$(NF-1), $(NF)}' filename.txt
你可以尝试这个。 它将最后两个字段(与空格分开)附加到预定义字符串。
答案 3 :(得分:0)
如何使用cut
和sed
?
$ cat spam
30/07/2012 14:46 17,232 training program.DOCX.ddkhqvh
08/03/2011 20:57 31,664 nutritional program.XLS.ddkhqvh
$ cut -c 37- spam | sed 's/^/F:\/home\//'
F:/home/training program.DOCX.ddkhqvh
F:/home/nutritional program.XLS.ddkhqvh
只要原始文件的文件名从第37个字符开始,它就会起作用。
如果您希望将结果放在其他文件中,只需使用>
$ cut -c 37- spam | sed 's/^/F:\/home\//' > output
如果您的初始文件列表来自在MS Windows中发出dir >your_file
命令,则只需使用dir /B >your_file
代替dir
即可获取的文件列表任何其他列,如大小,日期,所有者等...然后只需在Linux shell中发出以下命令,将文件夹添加到每行的开头:sed 's/^/F:\/home\//' your_file
。