如何使用sed作为模式“ /”来获得子字符串

时间:2018-10-25 07:53:25

标签: linux bash shell command-line scripting

我有以下字符串:

/ book / A00001 / 2018/01/15 / Chamber_Music

我想使用sed命令:

/ book / A00001 / 2018/01/15 /

谢谢

致谢

3 个答案:

答案 0 :(得分:1)

也许您正在寻找:sed "s/\(.*\)Chamber_Music/\1/g"

答案 1 :(得分:0)

无需使用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

在第二个问题中输入您的意见:

/book/A00001/2018/01/15
/book/A00001/2018/01/15
/book/A00001/2018/01/15
/book/A00001/2018/01/15
/book/A00001/2018/01/15
/book/A00001/2018/01/15

答案 2 :(得分:0)

您可以更改正则表达式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/"

但这比较复杂。