这个sed命令有效吗



我有两行sed,我很难理解

我知道sed的语法是:

sed OPTIONS[SCRIPT][INPUTFILE]

但在下面的这个命令中没有输入文件,我只是好奇这是在做什么,任何帮助都非常感谢

1.

$(echo $d | sed 's/.*///g')#
cat /kaldi/README | sed "s/akiplaner/${n}/g" >  extracted/$nf/etc/README #

*注意:下面是整个代码

for d in /dir1/dataset/audios/*; do
echo $d
n=$(echo $d | sed 's/.*///g') #
nf=${n}
echo $n $a $nf
mkdir -p extracted/$nf/wav
mkdir -p extracted/$nf/etc
rm -f extracted/$nf/etc/prompts-original
rm -f extracted/$nf/etc/PROMPTS
cat /kaldi/README | sed "s/akiplaner/${n}/g" >extracted/$nf/etc/README #
for f in $d/*.wav; do
n2=$(echo $f | sed 's/.*///g')
n3=$(echo $n2 | sed 's/.wav//g') # removing .wav from $n2 string
echo $n2
echo $n3
cp $f extracted/$nf/wav/$n2
#sox --vol 0.01 $f -t wav extracted/$nf/wav/$n2;
normalize-audio -a 0.3 extracted/$nf/wav/$n2
cp $d/$n3.txt temp.txt
echo "$n3 $(cat temp.txt)" >>extracted/$nf/etc/prompts-original
echo "${nf}/mfc/${n3} $(cat temp.txt)" >>extracted/$nf/etc/PROMPTS
done
a=$(($a + 1))
done

没有输入文件,我只是好奇在做什么

答案触手可及。

$ LC_ALL=C sed --help
...
... if no input files are
specified, then the standard input is read.

注意:|shell操作符将一个命令标准输出连接到另一个命令的标准输入。互联网上肯定有无穷无尽的资源来基本介绍shell流和输入输出操作——这可能是研究其中一些的好时机,比如https://mywiki.wooledge.org/BashGuide/InputAndOutput。

sed OPTIONS [SCRIPT] [INPUTFILE]

它是:

$ LC_ALL=C sed --help
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

[...]中的内容是可选的。...表示可以重复的内容。


脚本存在人为问题-它会破坏名称中带有空格或换行符的文件名,或破坏名称中具有*的文件名。。。记得用shellcheck检查你的脚本——它会发现这样的错误。

's/.*///g'我说这种模式是删除任何名称以开头的文件或文件夹,这是正确的吗

从文本的中删除/斜线之前的所有.*。您可以通过https://regexcrossword.com/和sedhttps://www.grymoire.com/Unix/Sed.html。

这是一种写basename "$n"的奇怪方式,下一行只是basename "$n" .wav

最新更新