我想询问如何使用 sed 和正则表达式从文件中提取特定字符串。
以下是输入文本文件(testfile.txt)的示例:
# This file contains a short description of the columns in the
# meta-analysis summary file, named '/some/output/directory/result.txt'
# (Skipping some comment lines...)
# Input for this meta-analysis was stored in the files:
# --> Input File 1 : /some/input/directory/cohort1/dataset1_chrAll.regenie.txt
# --> Input File 2 : /some/input/directory/cohort2/subdir1/chrAll-out.txt
# --> Input File 3 : /some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
# --> Input File 4 : /some/input/directory/cohort3/resfile.txt
# --> Input File 5 : /some/input/directory/cohort4/regenie_res_chrAll.txt
从这个文件,我想提取输入文件名的列表,因此结果应该是这样的:
/some/input/directory/cohort1/dataset1_chrAll.regenie.txt
/some/input/directory/cohort2/subdir1/chrAll-out.txt
/some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
/some/input/directory/cohort3/resfile.txt
/some/input/directory/cohort4/regenie_res_chrAll.txt
以下是我尝试过的:
尝试 1
这是我使用的初始命令。
cat testfile.txt | sed -e 's/\/some\/input\/directory\/([A-z0-9\/\.\-]*)\.txt/$1/g'
结果:
sed: -e expression #1, char 55: Invalid range end
尝试 2
经过一番搜索后,我尝试使用反斜杠转义括号。
cat testfile.txt | sed -e 's/\/some\/input\/directory\/\([A-z0-9\/\.\-]*\).txt/$1/g'
结果:
sed: -e expression #1, char 56: Invalid range end
所以它并没有解决问题。
尝试 3
我也尝试过转义括号。
cat testfile.txt | sed -e 's/\/some\/input\/directory\/\(\[A-z0-9\/\.\-\]\*\)\.txt/$1/g'
结果:
# This file contains a short description of the columns in the
# meta-analysis summary file, named '/some/output/directory/result.txt'
# (Skipping some comment lines...)
# Input for this meta-analysis was stored in the files:
# --> Input File 1 : /some/input/directory/cohort1/dataset1_chrAll.regenie.txt
# --> Input File 2 : /some/input/directory/cohort2/subdir1/chrAll-out.txt
# --> Input File 3 : /some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
# --> Input File 4 : /some/input/directory/cohort3/resfile.txt
# --> Input File 5 : /some/input/directory/cohort4/regenie_res_chrAll.txt
这并没有引发错误,但这不是我想要的。
尝试 4
最后,我尝试添加 -r 选项,但不转义括号或方括号。
cat testfile.txt | sed -re 's/\/some\/input\/directory\/([A-z0-9\/\.\-]*)\.txt/$1/g'
结果:
sed: -e expression #1, char 55: Invalid range end
第一次尝试时显示相同的错误消息。
我想问我的命令行中存在什么问题以及是否有任何可能的解决方案。
谢谢。