如何从字符串中删除非英文字符

如何从字符串中删除非英文字符

我编写了一个 BASH 脚本,可以从 mp3(等)中删除 META 数据,然后我将它们切碎以在需要时重新采样 mp3 并重新设计数据以创建与艺术家/专辑相对应的目录...

我找到了一些歌曲标题中间有非英文字符的 mp3。我需要知道去除中间部分的最佳方法,将刺痛的两端放回歌曲的标题中。使用 exiftool 我剥离 META 数据,将输出放入 var-name 中

 ARTIST1="`exiftool -Artist "$FILENAME" -p '$Artist'`"
 TITLE1="`exiftool -Title  "$FILENAME" -p '$Title'`"
 ALBUM1="`exiftool -Album  "$FILENAME" -p '$Album'`"


first strip... Artist is -> The Stranglers and Friends
first strip... Album is -> Live in
first strip... Title is -> The Raven – With Basil Gabbi

META 数据中的歌曲标题

乌鸦 ��������������������������������������������������������������������������� 与巴兹尔·加比 (Basil Gabbi) 一起

我如何去掉 META 数据歌曲名称之间的内容来得到这个?

The Raven With Basil Gabbi

语法看起来像这样

 newSongName="$( what ever code goes here to strip out that non english sting part )"

这样我就可以将新字符串写回到文件中,用新字符串替换旧的 META 数据。

谢谢

答案1

这应该会让你非常接近:

newSongName=$(echo "$TITLE1" | tr -dc '[:print:]')

它告诉tr删除不在其中的字符print 班级名称。您可以根据需要尝试其他角色类。

答案2

含有乱码的字符串 ->

 $ x="The Raven ƒÆ’¢â‚¬â€œ With Basil Gabbi"

这会保留所有大写字母,小写 az 会删除其他所有内容

$ echo ${x//[^A-Za-z ]/}

像这样留下字符串

The Raven With Basil Gabbi

在脚本中看起来像这样

title=${TITLE1}
## holds on to normal chars getting rid of the rest
title=${title//[^A-Za-z ]/}

相关内容