Bash 脚本 - 编辑文件中的文本行

Bash 脚本 - 编辑文件中的文本行

我正在使用 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

相关内容