我还没有找到在 sed 命令中使用此正则表达式 - .+?(?=,) 来提取该字符串的一部分的方法(使用第一个字符实例的 Lookbehind)。
用简单的英语来说,我想提取第一个逗号之前的字符串部分。由于我计划将来提取字符串的特定文件名,因此我不能依赖 cut 命令(我最终必须使用 sed 命令),:-
name='错误 1:/home/rphillips/Desktop/empties/BN23_2303.tif,带 1:无法计算统计信息,采样中未找到有效像素。'
这些是我使用过的变体,包括有效的测试 - sed 's/band/rose/'。然而,我使用的其他变体(如下所示)给出了空格作为输出。
while read -r line; do
name="$line"
echo $name
#file_path=$(echo $name | cut -d "," -f 1)
#file_path=$(echo $name | sed -e '/s\/.+?(?=,)///')
#file_path=$(echo $name | sed 's/band/rose/')
file_path=$(echo $name | sed '/s\/.+?(?=, )///')
#file_path=$(echo $name | grep -P '.+?(?=,)')
#file_path=$(echo $name | sed
#file_path=$(echo $name | awk '/.+?(?=,)/{print $name}'
echo $file_path
done < "$filename"
Run Code Online (Sandbox Code Playgroud)
预期结果 - 错误 1:/home/rphillips/Desktop/empties/BN25_2303.tif
实际结果 - “ …