这个 sed 命令有效吗?
Is this sed command valid?
我有 2 行 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
there is no input file I am just curious what this is doing
答案触手可及。
$ 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]...
[...]
中的内容是可选的。 ...
表示可以重复的内容。
脚本存在人为问题 - 它会在名称中包含空格或换行符的文件名或名称中包含 *
的文件名上中断...请记住使用 [=45= 检查您的脚本]check - 它会发现这样的错误。
's/.*///g' am I correct in saying this pattern is removing any file or folder whose name starts with
从文本的 行 中删除 /
斜线之前的所有内容 .*
。您可以通过 https://regexcrossword.com/ and sed here https://www.grymoire.com/Unix/Sed.html .
有趣地学习正则表达式
这是一种奇怪的写法 basename "$n"
,下一行只是 basename "$n" .wav
。
我有 2 行 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
there is no input file I am just curious what this is doing
答案触手可及。
$ 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]...
[...]
中的内容是可选的。 ...
表示可以重复的内容。
脚本存在人为问题 - 它会在名称中包含空格或换行符的文件名或名称中包含 *
的文件名上中断...请记住使用 [=45= 检查您的脚本]check - 它会发现这样的错误。
's/.*///g' am I correct in saying this pattern is removing any file or folder whose name starts with
从文本的 行 中删除 /
斜线之前的所有内容 .*
。您可以通过 https://regexcrossword.com/ and sed here https://www.grymoire.com/Unix/Sed.html .
这是一种奇怪的写法 basename "$n"
,下一行只是 basename "$n" .wav
。