我有一个脚本,用于将一系列单词和字符 slugify。问题是,当脚本参数使用 # 时,# 后面的其余行不会传递给我的脚本。如何访问 # 符号后面的参数(包括这些参数)?
例子:
$ make_slug this is a very long line #450
返回:
this-is-a-very-long-line
# 中的脚本参数在传递到脚本代码时被删除。示例代码:
arguments=""
for arg in "$@"
do
echo "$arg"
cleaned=`echo $arg | sed -e 's/[^0-9A-Za-z]//g' -e '/./!d'`
arguments+=${cleaned,,}"-"
done
echo ${arguments::-1}
答案1
我可能不明白你的问题,这里我假设你有一个文件/变量,其中包含多行文本,你想删除每行中从符号#
到行尾的所有文本。
如果是这种情况,并且假设您不希望在转义事件中出现此行为\#
,那么我会这样做:
sed 's/\([^\\]\)#.*$/\1/g' filename
如果文本包含在文件中filename
,或者包含在变量中var
,
sed 's/\([^\\]\)#.*$/\1/g' <<< "$variable"
例子
假设你的文件filename
包含以下文本
This is a line#this is a comment
this is another line without comments
this is a line with an escaped sharp symbol \# and therefore this is NOT a comment
那么上述命令的结果为
This is a line
this is another line without comments
this is a line with an escaped sharp symbol \# and therefore this is NOT a comment
解释
sed 's/\([^\\]\)#.*$/\1/g'
sed
是s特林编辑itor:'s/matched-pattern/replaced-pattern/options'
.s
代表sg
替代,以及选择Global,即在第一次替换后不会停止。[^\\]
数学的一切不是反斜杠\
(需要转义,因此使用两个\\
)\(pattern\)
存储匹配项并在替换模式中pattern
引用\1
.*$
匹配任意字符,直到行尾