Bash 脚本 - Bash 脚本 - 编辑文件中文本的行
Bash Script- Bash Script - Editing Lines on Text From File
我正在使用 bash 脚本从文本文件中读取数据。
数据:
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]
代码:
#!/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"
我想去掉两首歌之间的白色space,然后去掉歌曲开头的时间和文件结尾的hyperlink/studio名字。所以我的输出是:
Alex M.O.R.P.H. & Natalie Gioia - My Heaven
Fabio XB & Liuck feat. Christina Novelli
echo " 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]" \
| sed '/^[ \t]*$/d;s/^[0-9][0-9]:[0-9][0-9] //;s/http:.*//'
输出
Alex M.O.R.P.H. & Natalie Gioia - My Heaven
Fabio XB & Liuck feat. Christina Novelli - Back To You (Wach Remix)
# ---------------------------------------^----- ????
与您的示例输出显示的不完全相同,但符合您的书面要求
去掉歌曲开头的时间和结尾的hyperlink/studio名字...
与其在 while 循环中读取每一行,不如使用 sed
内置的功能来读取文件的每一行并进行处理。你可以做到
sed '/^[ \t]*$/d;s/^[0-9][0-9]:[0-9][0-9] //;s/http:.*//' file > newFile && /bin/mv newFile file
或者如果您使用的是现代 linux 环境(和其他环境),请使用 -i
选项覆盖现有文件:
sed -i '/^[ \t]*$/d;s/^[0-9][0-9]:[0-9][0-9] //;s/http:.*//' file
IHTH
#!/bin/bash
file="/home/nexusfactor/Desktop/inputData(linux).txt"
while read -r date line
do
[[ $date == "" ]] && continue # empty line -> next loop
[[ $date =~ ^\[ ]] && continue # line starts with "[" -> next loop
line="${line%(*}" # remove "(" and everything to the right of it
line="${line%http*}" # remove "http" and everything to the right of it
echo "$line"
done <"$file"
输出:
Alex M.O.R.P.H. & Natalie Gioia - My Heaven
Fabio XB & Liuck feat. Christina Novelli - Back To You
我正在使用 bash 脚本从文本文件中读取数据。
数据:
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]
代码:
#!/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"
我想去掉两首歌之间的白色space,然后去掉歌曲开头的时间和文件结尾的hyperlink/studio名字。所以我的输出是:
Alex M.O.R.P.H. & Natalie Gioia - My Heaven
Fabio XB & Liuck feat. Christina Novelli
echo " 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]" \
| sed '/^[ \t]*$/d;s/^[0-9][0-9]:[0-9][0-9] //;s/http:.*//'
输出
Alex M.O.R.P.H. & Natalie Gioia - My Heaven
Fabio XB & Liuck feat. Christina Novelli - Back To You (Wach Remix)
# ---------------------------------------^----- ????
与您的示例输出显示的不完全相同,但符合您的书面要求 去掉歌曲开头的时间和结尾的hyperlink/studio名字...
与其在 while 循环中读取每一行,不如使用 sed
内置的功能来读取文件的每一行并进行处理。你可以做到
sed '/^[ \t]*$/d;s/^[0-9][0-9]:[0-9][0-9] //;s/http:.*//' file > newFile && /bin/mv newFile file
或者如果您使用的是现代 linux 环境(和其他环境),请使用 -i
选项覆盖现有文件:
sed -i '/^[ \t]*$/d;s/^[0-9][0-9]:[0-9][0-9] //;s/http:.*//' file
IHTH
#!/bin/bash
file="/home/nexusfactor/Desktop/inputData(linux).txt"
while read -r date line
do
[[ $date == "" ]] && continue # empty line -> next loop
[[ $date =~ ^\[ ]] && continue # line starts with "[" -> next loop
line="${line%(*}" # remove "(" and everything to the right of it
line="${line%http*}" # remove "http" and everything to the right of it
echo "$line"
done <"$file"
输出:
Alex M.O.R.P.H. & Natalie Gioia - My Heaven Fabio XB & Liuck feat. Christina Novelli - Back To You