Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions src/uu/cut/locales/en-US.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,25 @@ cut-after-help = Each call must specify a mode (what to use for columns),
echo 'ab\\0cd' | cut -z -c 1

will result in 'a\\0c\\0'

# Help messages
cut-help-bytes = filter byte columns from the input source
cut-help-characters = alias for character mode
cut-help-delimiter = specify the delimiter character that separates fields in the input source. Defaults to Tab.
cut-help-whitespace-delimited = Use any number of whitespace (Space, Tab) to separate fields in the input source (FreeBSD extension).
cut-help-fields = filter field columns from the input source
cut-help-complement = invert the filter - instead of displaying only the filtered columns, display all but those columns
cut-help-only-delimited = in field mode, only print lines which contain the delimiter
cut-help-zero-terminated = instead of filtering columns based on line, filter columns based on \\0 (NULL character)
cut-help-output-delimiter = in field mode, replace the delimiter in output lines with this option's argument

# Error messages
cut-error-is-directory = Is a directory
cut-error-write-error = write error
cut-error-delimiter-and-whitespace-conflict = invalid input: Only one of --delimiter (-d) or -w option can be specified
cut-error-delimiter-must-be-single-character = the delimiter must be a single character
cut-error-multiple-mode-args = invalid usage: expects no more than one of --fields (-f), --chars (-c) or --bytes (-b)
cut-error-missing-mode-arg = invalid usage: expects one of --fields (-f), --chars (-c) or --bytes (-b)
cut-error-delimiter-only-with-fields = invalid input: The '--delimiter' ('-d') option only usable if printing a sequence of fields
cut-error-whitespace-only-with-fields = invalid input: The '-w' option only usable if printing a sequence of fields
cut-error-only-delimited-only-with-fields = invalid input: The '--only-delimited' ('-s') option only usable if printing a sequence of fields
114 changes: 114 additions & 0 deletions src/uu/cut/locales/fr-FR.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
cut-about = Affiche les colonnes d'octets ou de champs spécifiées de chaque ligne de stdin ou des fichiers d'entrée
cut-usage = cut OPTION... [FICHIER]...
cut-after-help = Chaque appel doit spécifier un mode (quoi utiliser pour les colonnes),
une séquence (quelles colonnes afficher), et fournir une source de données

### Spécifier un mode

Utilisez --bytes (-b) ou --characters (-c) pour spécifier le mode octet

Utilisez --fields (-f) pour spécifier le mode champ, où chaque ligne est divisée en
champs identifiés par un caractère délimiteur. Par exemple pour un CSV typique
vous pourriez utiliser ceci en combinaison avec la définition de la virgule comme délimiteur

### Spécifier une séquence

Une séquence est un groupe de 1 ou plusieurs nombres ou plages inclusives séparés
par des virgules.

cut -f 2,5-7 quelque_fichier.txt

affichera les 2ème, 5ème, 6ème, et 7ème champs pour chaque ligne source

Les plages peuvent s'étendre jusqu'à la fin de la ligne en excluant le second nombre

cut -f 3- quelque_fichier.txt

affichera le 3ème champ et tous les champs suivants pour chaque ligne source

Le premier nombre d'une plage peut être exclu, et ceci est effectivement
identique à utiliser 1 comme premier nombre : cela fait commencer la plage à la
première colonne. Les plages peuvent aussi afficher une seule colonne

cut -f 1,3-5 quelque_fichier.txt

affichera les 1er, 3ème, 4ème, et 5ème champs pour chaque ligne source

L'option --complement, quand utilisée, inverse l'effet de la séquence

cut --complement -f 4-6 quelque_fichier.txt

affichera tous les champs sauf les 4ème, 5ème, et 6ème

### Spécifier une source de données

Si aucun argument de fichier source n'est spécifié, stdin est utilisé comme source
de lignes à afficher

Si des arguments de fichier source sont spécifiés, stdin est ignoré et tous les fichiers sont
lus consécutivement si un fichier source n'est pas lu avec succès, un avertissement
sera affiché sur stderr, et le code de statut final sera 1, mais cut
continuera à lire les fichiers sources suivants

Pour afficher les colonnes depuis STDIN et un argument de fichier, utilisez - (tiret) comme
argument de fichier source pour représenter stdin.

### Options du Mode Champ

Les champs dans chaque ligne sont identifiés par un délimiteur (séparateur)

#### Définir le délimiteur

Définissez le délimiteur qui sépare les champs dans le fichier en utilisant l'option
--delimiter (-d). Définir le délimiteur est optionnel.
Si non défini, un délimiteur par défaut de Tab sera utilisé.

Si l'option -w est fournie, les champs seront séparés par tout nombre
de caractères d'espacement (Espace et Tab). Le délimiteur de sortie sera
un Tab sauf si explicitement spécifié. Seulement une des options -d ou -w peut être spécifiée.
Ceci est une extension adoptée de FreeBSD.

#### Filtrage optionnel basé sur le délimiteur

Si le drapeau --only-delimited (-s) est fourni, seules les lignes qui
contiennent le délimiteur seront affichées

#### Remplacer le délimiteur

Si l'option --output-delimiter est fournie, l'argument utilisé pour
elle remplacera le caractère délimiteur dans chaque ligne affichée. Ceci est
utile pour transformer les données tabulaires - par ex. pour convertir un CSV en
TSV (fichier séparé par tabulations)

### Fins de ligne

Quand l'option --zero-terminated (-z) est utilisée, cut voit \\0 (null) comme le
caractère de 'fin de ligne' (à la fois pour lire les lignes et
séparer les lignes affichées) au lieu de \\n (nouvelle ligne). Ceci est utile pour
les données tabulaires où certaines cellules peuvent contenir des nouvelles lignes

echo 'ab\\0cd' | cut -z -c 1

donnera comme résultat 'a\\0c\\0'

# Messages d'aide
cut-help-bytes = filtrer les colonnes d'octets depuis la source d'entrée
cut-help-characters = alias pour le mode caractère
cut-help-delimiter = spécifier le caractère délimiteur qui sépare les champs dans la source d'entrée. Par défaut Tab.
cut-help-whitespace-delimited = Utiliser tout nombre d'espaces (Espace, Tab) pour séparer les champs dans la source d'entrée (extension FreeBSD).
cut-help-fields = filtrer les colonnes de champs depuis la source d'entrée
cut-help-complement = inverser le filtre - au lieu d'afficher seulement les colonnes filtrées, afficher toutes sauf ces colonnes
cut-help-only-delimited = en mode champ, afficher seulement les lignes qui contiennent le délimiteur
cut-help-zero-terminated = au lieu de filtrer les colonnes basées sur la ligne, filtrer les colonnes basées sur \\0 (caractère NULL)
cut-help-output-delimiter = en mode champ, remplacer le délimiteur dans les lignes de sortie avec l'argument de cette option

# Messages d'erreur
cut-error-is-directory = Est un répertoire
cut-error-write-error = erreur d'écriture
cut-error-delimiter-and-whitespace-conflict = entrée invalide : Seulement une des options --delimiter (-d) ou -w peut être spécifiée
cut-error-delimiter-must-be-single-character = le délimiteur doit être un caractère unique
cut-error-multiple-mode-args = usage invalide : attend au plus une des options --fields (-f), --chars (-c) ou --bytes (-b)
cut-error-missing-mode-arg = usage invalide : attend une des options --fields (-f), --chars (-c) ou --bytes (-b)
cut-error-delimiter-only-with-fields = entrée invalide : L'option '--delimiter' ('-d') n'est utilisable que si on affiche une séquence de champs
cut-error-whitespace-only-with-fields = entrée invalide : L'option '-w' n'est utilisable que si on affiche une séquence de champs
cut-error-only-delimited-only-with-fields = entrée invalide : L'option '--only-delimited' ('-s') n'est utilisable que si on affiche une séquence de champs
122 changes: 70 additions & 52 deletions src/uu/cut/src/cut.rs
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,11 @@
let path = Path::new(&filename[..]);

if path.is_dir() {
show_error!("{}: Is a directory", filename.maybe_quote());
show_error!(
"{}: {}",
filename.maybe_quote(),
get_message("cut-error-is-directory")
);
set_exit_code(1);
continue;
}
Expand All @@ -392,7 +396,10 @@
}
}

show_if_err!(out.flush().map_err_context(|| "write error".into()));
show_if_err!(
out.flush()
.map_err_context(|| get_message("cut-error-write-error"))
);
}

// Get delimiter and output delimiter from `-d`/`--delimiter` and `--output-delimiter` options respectively
Expand All @@ -404,7 +411,7 @@
Some(_) if whitespace_delimited => {
return Err(USimpleError::new(
1,
"invalid input: Only one of --delimiter (-d) or -w option can be specified",
get_message("cut-error-delimiter-and-whitespace-conflict"),
));
}
Some(os_string) => {
Expand All @@ -420,7 +427,7 @@
{
return Err(USimpleError::new(
1,
"the delimiter must be a single character",
get_message("cut-error-delimiter-must-be-single-character"),
));
} else {
Delimiter::from(os_string)
Expand Down Expand Up @@ -502,39 +509,50 @@
matches.get_one::<String>(options::CHARACTERS),
matches.get_one::<String>(options::FIELDS),
) {
(1, Some(byte_ranges), None, None) => list_to_ranges(byte_ranges, complement).map(|ranges| {
Mode::Bytes(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: None,
},
)
}),
(1, None, Some(char_ranges), None) => list_to_ranges(char_ranges, complement).map(|ranges| {
Mode::Characters(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: None,
},
)
}),
(1, None, None, Some(field_ranges)) => list_to_ranges(field_ranges, complement).map(|ranges| {
Mode::Fields(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: Some(FieldOptions { delimiter, only_delimited })},
)
}),
(2.., _, _, _) => Err(
"invalid usage: expects no more than one of --fields (-f), --chars (-c) or --bytes (-b)".into()
),
_ => Err("invalid usage: expects one of --fields (-f), --chars (-c) or --bytes (-b)".into()),
(1, Some(byte_ranges), None, None) => {
list_to_ranges(byte_ranges, complement).map(|ranges| {
Mode::Bytes(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: None,
},
)
})
}

(1, None, Some(char_ranges), None) => {
list_to_ranges(char_ranges, complement).map(|ranges| {
Mode::Characters(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: None,
},
)
})
}

(1, None, None, Some(field_ranges)) => {
list_to_ranges(field_ranges, complement).map(|ranges| {
Mode::Fields(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: Some(FieldOptions {
delimiter,
only_delimited,
}),
},
)
})
}

(2.., _, _, _) => Err(get_message("cut-error-multiple-mode-args")),
_ => Err(get_message("cut-error-missing-mode-arg")),
};

let mode_parse = match mode_parse {
Expand All @@ -543,17 +561,17 @@
Mode::Bytes(_, _) | Mode::Characters(_, _)
if matches.contains_id(options::DELIMITER) =>
{
Err("invalid input: The '--delimiter' ('-d') option only usable if printing a sequence of fields".into())
Err(get_message("cut-error-delimiter-only-with-fields"))
}
Mode::Bytes(_, _) | Mode::Characters(_, _)
if matches.get_flag(options::WHITESPACE_DELIMITED) =>
{
Err("invalid input: The '-w' option only usable if printing a sequence of fields".into())
Err(get_message("cut-error-whitespace-only-with-fields"))
}
Mode::Bytes(_, _) | Mode::Characters(_, _)
if matches.get_flag(options::ONLY_DELIMITED) =>
{
Err("invalid input: The '--only-delimited' ('-s') option only usable if printing a sequence of fields".into())
Err(get_message("cut-error-only-delimited-only-with-fields"))

Check warning on line 574 in src/uu/cut/src/cut.rs

View check run for this annotation

Codecov / codecov/patch

src/uu/cut/src/cut.rs#L574

Added line #L574 was not covered by tests
}
_ => Ok(mode),
},
Expand Down Expand Up @@ -593,7 +611,7 @@
Arg::new(options::BYTES)
.short('b')
.long(options::BYTES)
.help("filter byte columns from the input source")
.help(get_message("cut-help-bytes"))
.allow_hyphen_values(true)
.value_name("LIST")
.action(ArgAction::Append),
Expand All @@ -602,7 +620,7 @@
Arg::new(options::CHARACTERS)
.short('c')
.long(options::CHARACTERS)
.help("alias for character mode")
.help(get_message("cut-help-characters"))
.allow_hyphen_values(true)
.value_name("LIST")
.action(ArgAction::Append),
Expand All @@ -612,56 +630,56 @@
.short('d')
.long(options::DELIMITER)
.value_parser(ValueParser::os_string())
.help("specify the delimiter character that separates fields in the input source. Defaults to Tab.")
.help(get_message("cut-help-delimiter"))
.value_name("DELIM"),
)
.arg(
Arg::new(options::WHITESPACE_DELIMITED)
.short('w')
.help("Use any number of whitespace (Space, Tab) to separate fields in the input source (FreeBSD extension).")
.help(get_message("cut-help-whitespace-delimited"))
.value_name("WHITESPACE")
.action(ArgAction::SetTrue),
)
.arg(
Arg::new(options::FIELDS)
.short('f')
.long(options::FIELDS)
.help("filter field columns from the input source")
.help(get_message("cut-help-fields"))
.allow_hyphen_values(true)
.value_name("LIST")
.action(ArgAction::Append),
)
.arg(
Arg::new(options::COMPLEMENT)
.long(options::COMPLEMENT)
.help("invert the filter - instead of displaying only the filtered columns, display all but those columns")
.help(get_message("cut-help-complement"))
.action(ArgAction::SetTrue),
)
.arg(
Arg::new(options::ONLY_DELIMITED)
.short('s')
.long(options::ONLY_DELIMITED)
.help("in field mode, only print lines which contain the delimiter")
.help(get_message("cut-help-only-delimited"))
.action(ArgAction::SetTrue),
)
.arg(
Arg::new(options::ZERO_TERMINATED)
.short('z')
.long(options::ZERO_TERMINATED)
.help("instead of filtering columns based on line, filter columns based on \\0 (NULL character)")
.help(get_message("cut-help-zero-terminated"))
.action(ArgAction::SetTrue),
)
.arg(
Arg::new(options::OUTPUT_DELIMITER)
.long(options::OUTPUT_DELIMITER)
.value_parser(ValueParser::os_string())
.help("in field mode, replace the delimiter in output lines with this option's argument")
.help(get_message("cut-help-output-delimiter"))
.value_name("NEW_DELIM"),
)
.arg(
Arg::new(options::FILE)
.hide(true)
.action(ArgAction::Append)
.value_hint(clap::ValueHint::FilePath)
.hide(true)
.action(ArgAction::Append)
.value_hint(clap::ValueHint::FilePath),
)
}
Loading