我有一个完整的csv文件,如下所示: 8 ;;
Grote schoudertas遇到gekleurde borduursels& nbsp“Twee Hanen”
德意志是gemaakt van een stijf vilt met een dikte van 4 mm waardoor deze goed zijn vorm houdt
Aan de achterkant heeft de tas een vak met ritssluiting
de voering van de tas is van stof
Binnenin is een afsluitbaar vak met een rits
Ook is er een vak voor de telefoon
De tas is ruim en praktisch
AFMETINGEN:
Hoogte遇到了手艺:46厘米(星巴特7厘米)
Hoogte:34厘米
在midten中的Breedte:42厘米左右Bodemmaat:30 x 10厘米& nbsp
Schouderriem lengte instelbaar面包车55厘米总长130厘米
Gebruikte materialen:vilt en kunstleer
Productiemethode:handwerk < /p>;56.95; Vilten tas在kleur http://staging.tassenmagazijn.nl/media/catalog/product/cache/0/image/a94bc919ee025799dd7ec1f1b7884918/1/0/10_vilten_tas_2b_2.jpg;http://staging.tassenmagazijn.nl/media/catalog/product/2/0/10_vilten_tas_2c_1.jpg;http://staging.tassenmagazijn.nl/media/catalog/product/2/0/10_vilten_tas_2d_1.jpg;;;;;;;Fixed;New;Send;True遇到了twee hanen;
包含的文件是完整路径,我只想要文件名。
所以http://staging.tassenmagazijn.nl/media/catalog/product/cache/0/image/a94bc919ee025799dd7ec1f1b7884918/1/0/10_vilten_tas_2b_2.jpg;变成10_vilten_tas_2b_2.jpg;
正如您所看到的,路径的结构并不总是相同的。我可以使用某种linux命令吗?
答案 0 :(得分:1)
假设您的所有路径都是http:// <Startup>
/ <anything>
,那么
<filename>
将改变例如:
sed 's~http://.*/~~' <file>
到
http://staging.tassenmagazijn.nl/media/catalog/product/cache/0/image/a94bc919ee025799dd7ec1f1b7884918/1/0/10_vilten_tas_2b_2.jpg
答案 1 :(得分:0)
这在很大程度上取决于你的shell及read
可用的工具,直到分隔符,';'
在这种情况下。如果你有BASH或类似的shell,那么解决方案很简单子串删除:
#!/bin/bash
while read -d ';' -r line; do
((${#line} >= 12)) && [[ $line =~ http ]] &&
printf "%s\n" ${line##*/}
done < "$1"
如果你只限于POSIX shell,那么解决方案需要花费更多的工作,一旦隔离,你将在sed
中继来解析URL。从包含由分号分隔的多个URL的行中隔离每个URL有点棘手。在POSIX shell中,你基本上不得不每行阅读一次读取一个字符(这对大文件来说很慢)以下验证每行被视为一个URL在开头包含http
:
#!/bin/sh
url=""
while read -r line; do
len=`expr length "$line"`
urlstart=`expr index "$line" "h"`
line=`expr substr "$line" "$urlstart" "$len"`
while [ $len -gt 0 ]; do
c=`expr substr "$line" 1 1`
if [ x$c = 'x;' ]; then
if [ `expr length "$url"` -ge 12 ]; then
# printf "url: %s\n" "$url"
ulen=`expr length "$url"`
urlstart=`expr index "$url" "h"`
if [ $urlstart -gt 0 ]; then
if [ $urlstart -gt 1 ]; then
url=`expr substr "$url" "$urlstart" "$ulen"`
fi
urlflag=0
while [ `expr substr "$url" 1 4` != http ]; do
url=`expr substr "$url" 2 "$ulen"`
urlstart=`expr index "$url" "h"`
if [ "$urlstart" -eq 0 ]; then
urlflag=1
break
fi
url=`expr substr "$url" "$urlstart" "$ulen"`
ulen=`expr length "$url"`
if [ $ulen -le 12 ]; then
urlflag=1
break
fi
done
if [ $urlflag -ne 1 ]; then
if [ `expr substr "$url" 1 4` = http ]; then
echo "$url" | sed -e 's/http.*\///'
fi
fi
fi
fi
url=""
else
url="$url$c"
fi
line=`expr substr "$line" 2 "$len"`
len=`expr length "$line"`
done
done <"$1"
如果您可以确保只有长于某个常量的行是URL,那么您可以通过不搜索和验证包含http
的每个字符串来显着提高POSIX解决方案的性能。要根据长度解析URL,类似于以下内容将起作用:
#!/bin/sh
while read -r line; do
printf "\n%s\n\n" "$line"
len=`expr length "$line"`
sidx=`expr index "$line" ";"`
while [ $len -gt 0 ]; do
if [ $sidx -gt 0 ]; then
let end=sidx-1
str=`expr substr "$line" 1 "$end"`
slen=`expr length "$str"`
if [ $slen -gt 12 ]; then
echo "$str" | sed -e 's/^.*\///'
fi
else
if [ $len -gt 12 ]; then
echo "$line" | sed -e 's/^.*\///'
fi
break;
fi
let start=sidx+1
line=`expr substr "$line" "$start" "$len"`
len=`expr length "$line"`
sidx=`expr index "$line" ";"`
done
done <"$1"
12
的长度只是作为jpeg文件的最短网址得出(例如http://a.jpg
)
在所有情况下,您给出的示例文件的结果都相同:
<强>输入强>
$ cat dat/httppaths.txt
;56.95;Vilten tas met twee hanen in kleur http://staging.tassenmagazijn.nl/\
media/catalog/product/cache/0/image/a94bc919ee025799dd7ec1f1b7884918/1/0/10_vilte\
n_tas_2b_2.jpg;http://staging.tassenmagazijn.nl/media/catalog/product/2/0/10_vilte\
n_tas_2c_1.jpg;http://staging.tassenmagazijn.nl/media/catalog/product/2/0/10_vilte\
n_tas_2d_1.jpg;;;;;;;Fixed;New;Send;True;
使用/输出强>
$ sh parsehttppath.sh dat/httppaths.txt
10_vilten_tas_2b_2.jpg
10_vilten_tas_2c_1.jpg
10_vilten_tas_2d_1.jpg
答案 2 :(得分:0)
尝试这样的事情:
cat file.txt | grep jpg | grep http | grep "/" | awk -F "/" '{ for(i = 1; i <= NF; i++) if ($i ~ "jpg") {print $i} }' | awk -F ";" '{print $1}' | xargs