好的,这是给定的用户输入:
$ myscript.sh file-name.txt
Run Code Online (Sandbox Code Playgroud)
我想修剪“file-name.txt”以检索bash脚本中的“文件”
#!/bin/bash
FILENAME=$1
# trim text after '-' from user input 'file-name.txt'
# save 'file' back to $1
Run Code Online (Sandbox Code Playgroud)
我最好的猜测是以某种方式混合 sed 和正则表达式,但我不是那些专家:(
有任何想法吗?
我尝试了 muru 的建议以获得更复杂的输入。
给定输入:ABCD-0.1.5-6.1.txt
想要的输出:ABCD
#!/bin/bash
TRIMMED1="${1%-*}"
TRIMMED2="${1%%-*}"
TRIMMED3="${TRIMMED1%-*}"
TRIMMED4="${TRIMMED1%%-*}"
TRIMMED5="${1%-[0-9]*}"
TRIMMED6="${1%%-[0-9]*}"
echo "user input : $1"
echo "TRIMMED1 : $TRIMMED1"
echo "TRIMMED2 : $TRIMMED2"
echo "TRIMMED3 : $TRIMMED3"
echo "TRIMMED4 : $TRIMMED4"
echo "TRIMMED5 : $TRIMMED5"
echo "TRIMMED6 : $TRIMMED6"
Run Code Online (Sandbox Code Playgroud)
结果:
user input : A-B-C-D-0.1.5-6.1.txt
TRIMMED1 : A-B-C-D-0.1.5
TRIMMED2 : A
TRIMMED3 : A-B-C-D
TRIMMED4 : A
TRIMMED5 : A-B-C-D-0.1.5
TRIMMED6 : A-B-C-D
Run Code Online (Sandbox Code Playgroud)
您不必为此使用外部工具。纯猛击:
FILENAME="${1%-*}"
Run Code Online (Sandbox Code Playgroud)
%
用于去除最短的匹配后缀。如果你有file-name-foo
,你会得到file-name
。要删除最长的匹配后缀,请使用%%
.
要保存到$1
,您必须使用set
. 就像是:
set -- "${1%-*}" "${@:2}"
Run Code Online (Sandbox Code Playgroud)
然后下次使用时$1
,它将具有修剪过的文本。
请记住,=
分配变量时周围没有空格。
你可以通过
#!/bin/bash
FILENAME=$1
TRIMMED=$(echo "$FILENAME" | cut -f1 -d-)
Run Code Online (Sandbox Code Playgroud)
该命令将输出字段 1-
用作分隔符。