我正在使用 bash 脚本从文本文件读取数据。
#!/bin/bash
file="/home/nexusfactor/Desktop/inputData(linux).txt"
while IFS= read -r line
do
# display $line or do somthing with $line
echo "$line"
done <"$file"
数据:
04:31 Alex M.O.R.P.H. & Natalie Gioia - My Heaven http://goo.gl/rMOa2q
[ARMADA MUSIC]
07:46 Fabio XB & Liuck feat. Christina Novelli - Back To You (Wach Remix) http://goo.gl/yGxqRX
[DIGITAL SOCIETY RECORDINGS]
我想删除两首歌曲之间的空白,然后删除歌曲开头的时间和文件末尾的超链接/工作室名称。所以我的输出将是:
Alex M.O.R.P.H. & Natalie Gioia - My Heaven
Fabio XB & Liuck feat. Christina Novelli
答案1
您可以grep
在 Perl 模式下使用后视和前视来提取相关部分(在时间码和最后的链接之间)。它需要匹配格式,否则它将无法解析该行,这样也可以解决您的空格问题。
$ grep -Po '(?<=\d\d:\d\d ).*(?= http)' data
Alex M.O.R.P.H. & Natalie Gioia - My Heaven
Fabio XB & Liuck feat. Christina Novelli - Back To You (Wach Remix)
如果您需要循环,grep 可以处理 STDIN:
while read line
do
echo "$line" | grep -Po '(?<=\d\d:\d\d ).*(?= http)'
done < /home/oli/Desktop/data
不过,如果你只对过滤后的数据感兴趣,我会循环 grep 的输出:
grep -Po '(?<=\d\d:\d\d ).*(?= http)' data | \
while read line
do
echo "$line"
done