web-dev-qa-db-fra.com

bash, extraire la chaîne avant deux points

Si j'ai un fichier avec des lignes comme celle-ci

/some/random/file.csv:some string
/some/random/file2.csv:some string2

Existe-t-il un moyen d'obtenir un fichier qui n'a que la première partie avant les deux points, par exemple.

/some/random/file.csv
/some/random/file2.csv

Je préférerais simplement utiliser un bash one liner, mais Perl ou python est également ok.

34
user788171
cut -d: -f1

ou

awk -F: '{print $1}'

ou

sed 's/:.*//'
62
ray

Une autre façon BASH pure:

> s='/some/random/file.csv:some string'
> echo "${s%%:*}"
/some/random/file.csv
37
anubhava

Essayez ceci en pure bash:

FRED="/some/random/file.csv:some string"
a=${FRED%:*}
echo $a

Ici est une documentation qui aide.

17
Mark Setchell

Une autre solution pure Bash:

while IFS=':' read a b ; do
  echo "$a"
done < "$infile" > "$outfile"
1
Fritz G. Mehner

Cela a été demandé tellement de fois qu'un utilisateur avec plus de 1000 points le demande, c'est étrange
Mais juste pour montrer juste une autre façon de le faire:

echo "/some/random/file.csv:some string" | awk '{sub(/:.*/,x)}1'
/some/random/file.csv
0
Jotne