我有一个字符串,它是输入字符串,./y1563/y1563.xls
想将其转换为字符串输出y1563/y1563.txt
。
答案1
您通常不会用来sed
修改已有的字符串(根据你的评论) 在 shell 变量中。至少如果您只想删除和/或替换字符串的后缀,则不是。
反而,
NAME=./y1563/y1563.xls
NAME=${NAME%.xls}.txt # remove .xls suffix, append .txt suffix
NAME=${NAME#./} # remove ./ prefix (this may not be needed)
这些 (${variable%pattern}
和${variable#pattern}
) 是标准变量替换从变量值中删除后缀和前缀字符串。
即使该$NAME
值包含嵌入的换行符,这也可以正常工作。文件名中允许使用换行符,但由于sed
是面向行的编辑器,因此它无法正确处理此类输入。