Linux 如何使用sed作为模式获取子字符串/&引用;

Linux 如何使用sed作为模式获取子字符串/&引用;,linux,bash,shell,command-line,scripting,Linux,Bash,Shell,Command Line,Scripting,我有以下字符串: /book/A00001/2018/01/15/室内乐 我想使用sed命令: /book/A00001/2018/01/15/ 谢谢 您可能正在寻找:sed“s/\(.*)Chamber\u Music/\1/g”无需使用sed,您可以使用正常的shell字符串处理: filename='gash.txt' new_filename="$filename.new" while read line do line=${line%/*} echo $line

我有以下字符串:

/book/A00001/2018/01/15/室内乐

我想使用sed命令:

/book/A00001/2018/01/15/

谢谢


您可能正在寻找:
sed“s/\(.*)Chamber\u Music/\1/g”
无需使用
sed
,您可以使用正常的shell字符串处理:

filename='gash.txt'
new_filename="$filename.new"

while read line
do
    line=${line%/*}
    echo $line 

done <"$filename" >"$new_filename"  

#mv "$new_filename" "$filename"     # Commented out to be optional

您可以更改regexp
sed
分隔符。。。。请参阅
s
命令文档。如果您使用,例如

sed 's:([a-zA-Z0-9/]*)[a-zA-Z]*$:\1:'
然后,
/
将失去其特殊处理,
字符将接受它。当然,您可以将匹配模式存储在环境变量中,然后将其馈送到
sed(1)
,并将所有
/
替换为
\/
以转义每个
/

pattern=`echo "([a-zA-Z0-9/])[a-zA-Z]*\$" | sed 's/\//\\//'`
sed "s/${pattern}/\\1/"
但这更为复杂

pattern=`echo "([a-zA-Z0-9/])[a-zA-Z]*\$" | sed 's/\//\\//'`
sed "s/${pattern}/\\1/"