Bob*_*urt 3 command-line bash text-processing
我有这个 .scp 文件,其中包含转换一堆文件所需的完整命令。
这个文件是由不同的脚本生成的,用于不同的目的,但现在我需要它转换一堆文件。
问题是每个文件都以被转换文件的文件名开头,当我想执行它时这不起作用..
如何删除文件的第一个,以便我可以转换所有文件,就像执行脚本一样简单?
下面是如何格式化文件中的文本的示例。
fcaw-b-an406 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an406-fcaw-b.sph |
fcaw-b-an407 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an407-fcaw-b.sph |
fcaw-b-an408 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an408-fcaw-b.sph |
fcaw-b-an409 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an409-fcaw-b.sph |
fcaw-b-an410 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an410-fcaw-b.sph |
fcaw-b-cen1 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/cen1-fcaw-b.sph |...
Run Code Online (Sandbox Code Playgroud)
期望输出
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an406-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an407-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an408-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an409-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an410-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/cen1-fcaw-b.sph |...
Run Code Online (Sandbox Code Playgroud)
很多方法:
grep使用 PCRE ( -P):
grep -Po '^[^\s]+\s+\K.*' file.txt
Run Code Online (Sandbox Code Playgroud)
^[^\s]+\s+匹配第一个字段和尾随空格,\K丢弃匹配,然后.*匹配行的其余部分并打印sed:
sed -E 's/^[^[:blank:]]+[[:blank:]]+//' file.txt
Run Code Online (Sandbox Code Playgroud)
^[^[:blank:]]+[[:blank:]]+ 匹配第一个字段,再次使用尾随空格并替换为空字符串 awk:
awk -F "[[:blank:]]+" '{$1=""; print substr($0, 2)}' file.txt
Run Code Online (Sandbox Code Playgroud)
-F "[[:blank:]]+"将字段分隔符设置为一个或多个空格,$1=""将第一个字段设置为空字符串,这会在前面引入一个空格,因此我们需要使用 substr($0, 2)` 进行字符串切片以获取从第二个开始的字符cut:
cut -d" " -f2- file.txt
Run Code Online (Sandbox Code Playgroud)
-d" "将分隔符设置为空格,并-f2-从第二个开始打印字段bash:
while read -r _ desired; do echo "$desired"; done <file.txt
Run Code Online (Sandbox Code Playgroud)
_,desired包含剩余部分,并由echo "$desired" perl:
perl -pe 's/^[^\s]+\s+//' file.txt
Run Code Online (Sandbox Code Playgroud)
sed一个python:
#!/usr/bin/env python
with open('file.txt') as f:
for line in f:
print line.split(' ', 1)[1]
Run Code Online (Sandbox Code Playgroud)
line.split(' ', 1)并将split在空间上进行最大的1拆分操作,因此索引 0 将包含第一个单词,索引 1 将包含所需的部分(即从第二个单词到结尾)| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |