如果分隔符在双引号内,则剪切输出不正确

问题描述 投票:0回答:1

cut -f2 -d"," - 由于第一列封装在双引号内,因此无法正确获取第二列。

"Foo News, Videos (Android)","Foo News, Videos - Android","Foo News, Videos (Android)"
Bar News (iOS),"Bar News, Movie - iOS",Bar News & Movie (iOS)
shell unix cut
1个回答
0
投票

在 bash 5.2 中,可以这样做:此版本的 bash 附带了一个尊重双引号字段的“分隔符分隔值”可加载模块。

enable dsv
while IFS= read -r line; do
  dsv -a fields "$line"
  declare -p fields
  printf '%s\n' "${fields[1]}"
done < file.csv
declare -a fields=([0]="Foo News, Videos (Android)" [1]="Foo News, Videos - Android" [2]="Foo News, Videos (Android)")
Foo News, Videos - Android
declare -a fields=([0]="Bar News (iOS)" [1]="Bar News, Movie - iOS" [2]="Bar News & Movie (iOS)")
Bar News, Movie - iOS

我的 ~/.bashrc 中有这个可以让这变得简单:

# for loadable builtins
bash_root=${BASH%/bin/bash}
[[ -d "$bash_root/lib/bash" ]] && BASH_LOADABLES_PATH="$bash_root/lib/bash"
unset bash_root
© www.soinside.com 2019 - 2024. All rights reserved.