string - 文字列を操作する¶
概要¶
string collect [-a | --allow-empty] [-N | --no-trim-newlines] [STRING ...]
string escape [-n | --no-quoted] [--style=] [STRING ...]
string join [-q | --quiet] [-n | --no-empty] SEP [STRING ...]
string join0 [-q | --quiet] [-n | --no-empty] [STRING ...]
string length [-q | --quiet] [STRING ...]
string lower [-q | --quiet] [STRING ...]
string match [-a | --all] [-e | --entire] [-i | --ignore-case]
[-g | --groups-only] [-r | --regex] [-n | --index]
[-q | --quiet] [-v | --invert]
PATTERN [STRING ...]
string pad [-r | --right] [-C | --center] [(-c | --char) CHAR] [(-w | --width) INTEGER]
[STRING ...]
string repeat [(-n | --count) COUNT] [(-m | --max) MAX] [-N | --no-newline]
[-q | --quiet] [STRING ...]
string repeat [-N | --no-newline] [-q | --quiet] COUNT [STRING ...]
string replace [-a | --all] [-f | --filter] [-i | --ignore-case]
[-r | --regex] [-q | --quiet] PATTERN REPLACE [STRING ...]
string shorten [(-c | --char) CHARS] [(-m | --max) INTEGER]
[-N | --no-newline] [-l | --left] [-q | --quiet] [STRING ...]
string split [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]
[-q | --quiet] [-r | --right] SEP [STRING ...]
string split0 [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]
[-q | --quiet] [-r | --right] [STRING ...]
string sub [(-s | --start) START] [(-e | --end) END] [(-l | --length) LENGTH]
[-q | --quiet] [STRING ...]
string trim [-l | --left] [-r | --right] [(-c | --chars) CHARS]
[-q | --quiet] [STRING ...]
string unescape [--style=] [STRING ...]
string upper [-q | --quiet] [STRING ...]
説明¶
string は文字列に対する操作を行います。
標準入力がパイプやファイルに接続されていない限り、 STRING 引数はコマンドラインから取得されます。 接続されている場合は標準入力から1行につき1つの STRING として読み込まれます。 コマンドラインと標準入力の両方で STRING 引数を与えることはエラーになります。
- で始まる引数は通常スイッチとして解釈されます。 -- を指定すると、 それ以降の引数はたとえ - で始まっていてもスイッチとして扱われません。 スイッチと必須引数はコマンドライン上でのみ認識されます。
ほとんどのサブコマンドは -q 、 --quiet スイッチを受け付けます。 これは通常の出力を抑制しますが、ドキュメントに記載されたステータスで終了します。 この場合、これらのコマンドは利用可能な入力をすべて読み取ることなく、途中で終了します。
以下のサブコマンドが利用可能です。
"collect" サブコマンド¶
string collect [-a | --allow-empty] [-N | --no-trim-newlines] [STRING ...]
string collect は、入力を単一の出力引数にまとめます。 これはコマンド置換で使用された際に出力を分割しません。 他のコマンドからの複数行の出力を変数にまとめたい場合に便利です。 終了ステータス: 出力引数のいずれかが空でない場合は 0、 それ以外の場合は 1 です。
echo (cmd | string collect) のようなコマンドは、 引用符で囲まれたコマンド置換(echo "$(cmd)")とほぼ同等です。 主な違いは、前者は 0 個または 1 個の要素として評価されるのに対し、 引用符で囲まれたコマンド置換は文字列補間によって常に 1 個の要素として評価される点です。
入力の代わりに複数の引数で呼び出された場合、 string collect は各引数を個別に保持します。 このとき出力引数の数は、 string collect に与えられた引数の数と等しくなります。
"$(cmd)" 置換と同様に、入力の末尾にある改行はトリミングされます。 この動作を無効にするには --no-trim-newlines を使用してください。 これは、 set contents (cat filename | string collect -N) のようなコマンドを実行する際に便利です。
--allow-empty を指定すると、 string collect は常に 1 つの(空の) 引数を出力します。これは、引数が消失するのを防ぐために使用できます。
例¶
>_ echo "zero $(echo one\ntwo\nthree) four"
zero one
two
three four
>_ echo \"(echo one\ntwo\nthree | string collect)\"
"one
two
three"
>_ echo \"(echo one\ntwo\nthree | string collect -N)\"
"one
two
three
"
>_ echo foo(true | string collect --allow-empty)bar
foobar
"escape" 、 "unescape" サブコマンド¶
string escape [-n | --no-quoted] [--style=] [STRING ...]
string unescape [--style=] [STRING ...]
string escape は、各 STRING をいくつかの方法のいずれかでエスケープします。
--style=script (デフォルト) は、元の引数を再度生成するために eval に渡せる形式に文字列を変更します。デフォルトでは、すべての特殊文字がエスケープされ、可能な場合は引用符を使用して出力を簡略化します。 -n 、 --no-quoted が指定された場合、簡略化された引用符形式は使用されません。終了ステータス: 少なくとも 1 つの文字列がエスケープされた場合は 0、それ以外の場合は 1 です。
--style=var は、英数字以外の文字を 16 進エンコードすることで、文字列を変数名として使用できるようにします。文字列はエンコードされる前に、まず UTF-8 に変換されます。
--style=url は、URL で許可されていない文字を 16 進エンコードすることで、文字列を URL として使用できるようにします。文字列はエンコードされる前に、まず UTF-8 に変換されます。
--style=regex は、正規表現内でリテラルとして一致させるために、入力文字列をエスケープします。文字列はエンコードされる前に、まず UTF-8 に変換されます。
string unescape は string escape コマンドの逆の操作を行います。 エスケープ解除される文字列が適切な形式でない場合は無視されます。 例えば、 string unescape --style=var (string escape --style=var $str) を実行すると元の文字列が返されます。 --style=regex のエスケープ解除はサポートされていません。
例¶
>_ echo \x07 | string escape
\cg
>_ string escape --style=var 'a1 b2'\u6161
a1_20_b2_E6_85_A1_
"join" 、 "join0" サブコマンド¶
string join [-q | --quiet] [-n | --no-empty] [--] SEP [STRING ...]
string join0 [-q | --quiet] [-n | --no-empty] [--] [STRING ...]
各 STRING 引数を、 SEP (string join の場合) またはヌルバイト(NUL) (string join0 の場合) で区切られた単一の文字列に結合します。 終了ステータス: 少なくとも 1 つの結合が実行された場合は 0、それ以外の場合は 1 です。
- -n, --no-empty
空の文字列を考慮から除外します(例:
string join -n + a b "" cはa+b++cではなくa+b+cに展開されます )。- -q, --quiet
文字列を出力せず、上記のとおり終了ステータスのみを設定します。
警告: 位置引数がフラグとして解釈されるのを防ぐために、引数の前に -- を挿入してください。 そうしないと、 - で始まる文字列はフラグ引数として扱われ、ほとんどの場合コマンドが失敗する原因になります。 これは、リテラル文字列の代わりに、そのような文字列に展開される変数を指定した場合にも当てはまります。 コマンドの最後にフラグ引数を追加する必要がない場合は、予期しないトラブルを避けるために、常に -- を使用してください。
string join0 は末尾に NUL を追加します。これは、 sort -z のような NUL 区切りの入力を受け付けるツールと組み合わせて使用する場合に非常に便利です。
Unix は文字列の終端として NUL を使用するため、(コマンド置換 を介して)``string join0`` の出力をコマンドの「引数」として渡すと、実際には機能しません。 fish は正しいバイト列を渡しますが、コマンド側で引数の終わりを判断できなくなります。これは Unix の引数渡しの制限です。
例¶
>_ seq 3 | string join ...
1...2...3
# Give a list of NUL-separated filenames to du (this is a GNU extension)
>_ string join0 file1 file2 file\nwith\nmultiple\nlines | du --files0-from=-
# Just put the strings together without a separator
>_ string join '' a b c
abc
>_ set -l markdown_list '- first' '- second' '- third'
# Strings with leading hyphens (also in variable expansions) are interpreted as flag arguments by default.
>_ string join \n $markdown_list
string join: - first: unknown option
# Use '--' to prevent this.
>_ string join -- \n $markdown_list
- first
- second
- third
"length" サブコマンド¶
string length [-q | --quiet] [-V | --visible] [STRING ...]
string length は、各文字列引数の長さを文字数で報告します。終了ステータス: 少なくとも 1 つの空でない STRING が指定された場合は 0、それ以外の場合は 1 です。
-V 、 --visible を指定すると、引数の可視幅を使用します。 これは、fish が認識しているエスケープシーケンスを除外し、 $fish_emoji_width や $fish_ambiguous_width を考慮することを意味します。 また、(\n で区切られた)各行を個別にカウントし、キャリッジリターン(\r)がある場合はその行で最も広い部分のみをカウントします。 これは、現在のターミナルで STRING が占有する列数を測定することを目的としています。
例¶
>_ string length 'hello, world'
12
>_ set str foo
>_ string length -q $str; echo $status
0
# Equivalent to test -n "$str"
>_ string length --visible (set_color red)foobar
# the set_color is discounted, so this is the width of "foobar"
6
>_ string length --visible 🐟🐟🐟🐟
# depending on $fish_emoji_width, this is either 4 or 8
# in new terminals it should be
8
>_ string length --visible abcdef\r123
# this displays as "123def", so the width is 6
6
>_ string length --visible a\nbc
# counts "a" and "bc" as separate lines, so it prints width for each
1
2
"lower" サブコマンド¶
string lower [-q | --quiet] [STRING ...]
string lower は、各文字列引数を小文字に変換します。終了ステータス: 少なくとも 1 つの文字列が小文字に変換された場合は 0、それ以外の場合は 1。 これは、 -q フラグと組み合わせることで、文字列がすでに小文字であるかどうかを簡単にテストできることを意味します。
"match" サブコマンド¶
string match [-a | --all] [-e | --entire] [-i | --ignore-case]
[-g | --groups-only] [-r | --regex] [-n | --index]
[-q | --quiet] [-v | --invert] [(-m | --max-matches) MAX]
PATTERN [STRING ...]
string match は、各 STRING を PATTERN に対してテストし、一致する部分文字列を出力します。 -a 、 --all が指定されない限り、各 STRING について最初に一致したもののみが報告されます。指定された場合は、すべての一致が報告されます。
-e 、 --entire を指定すると、パターンの前後に一致しなかった部分も含め、 一致した文字列全体が出力されます(-o フラグを指定しない grep と同等です )。 当然ながら、 --regex フラグを指定しているかどうかに応じて、パターンの前後に * や .* を付加することでも同じ結果を得られます。 --entire フラグは、パターンの記述を複雑にすることなく、 string match の意図を明確にするための方法です。 --entire と --regex の両方が指定されていない場合、 PATTERN は STRING 全体に一致しなければ報告されません。
--ignore-case 、 -i を使用すると、大文字と小文字を区別せずに照合できます。
--groups-only 、 -g が指定された場合、キャプチャグループのみが報告されます。 つまり、一致した全体部分はスキップされます。このオプションは --entire や --invert とは併用できず、 --regex を必要とします。 string replace の代わりに、 文字列の「この部分」だけを取り出す簡単な切り出しツールとして便利です。
--index 、 -n が指定された場合、各一致は1から始まる開始位置と長さとして報告されます。 デフォルトでは、 PATTERN は各 STRING 引数全体に対して照合されるグロブパターンとして解釈されます。 グロブパターンの場合、 STRING 全体に一致した場合のみ有効な一致とみなされます。
--regex 、 -r が指定された場合、 PATTERN は Perl 互換の正規表現として解釈され、 STRING 全体に一致する必要はありません。キャプチャグループを含む正規表現の場合、 一致ごとに複数の項目(一致全体が1つと、各キャプチャグループごとに1つずつ)が報告されます。 この場合、 --entire が指定されない限り、 STRING の一致した部分のみが報告されます。
正規表現を使用して照合を行う際、 string match はすべての名前付きキャプチャグループ ((?<name>expression))に対して自動的に変数を設定します。名前付きキャプチャグループごとに、 デフォルトのスコープでグループ名と同じ名前の変数を作成し、最初の照合引数におけるキャプチャグループの値を設定します。 名前付きキャプチャグループが空文字列に一致した場合、変数は空文字列に設定されます(set var "" と同様 )。 一致しなかった場合、変数は空に設定されます(set var と同様 )。 --regex を --all と併用すると、この挙動が変わります。各名前付き変数は一致したリストを保持し、最初の要素に1番目の一致、 2番目の要素に2番目の一致、といった具合に格納されます。グループが空であったか一致しなかった場合、 対応する要素は空文字列になります。
--invert 、 -v を使用した場合、指定されたグロブパターンまたは正規表現に 一致しない行のみが選択されます。
--max-matches MAX 、 -m MAX を使用すると、 string は入力のうち MAX 行が一致した時点で 照合を停止します。これは長い入力を処理する際、入力ストリームをすべて読み切るよりかなり前に 限定された数の結果が得られることが予想される場合に「早期終了」の最適化として利用できます。 --invert 、 -v と組み合わせた場合は、反転(不一致)した一致のみをカウントします。
終了ステータス: 少なくとも1つの一致が見つかった場合は 0、それ以外の場合は 1 です。
グロブ照合の例¶
>_ string match 'a' a
a
>_ string match 'a*b' axxb
axxb
>_ string match -i 'a*B' Axxb
Axxb
>_ string match -- '-*' -h foo --version bar
# To match things that look like options, we need a `--`
# to tell string its options end there.
-h
--version
>_ echo 'ok?' | string match '*?'
ok?
# Note that only the second STRING will match here.
>_ string match 'foo' 'foo1' 'foo' 'foo2'
foo
>_ string match -e 'foo' 'foo1' 'foo' 'foo2'
foo1
foo
foo2
>_ string match 'foo*' 'foo1' 'foo' 'foo2'
foo1
foo2
正規表現照合の例¶
>_ string match -r 'cat|dog|fish' 'nice dog'
dog
>_ string match -r -v "c.*[12]" {cat,dog}(seq 1 4)
dog1
dog2
cat3
dog3
cat4
dog4
>_ string match -r -- '-.*' -h foo --version bar
# To match things that look like options, we need a `--`
# to tell string its options end there.
-h
--version
>_ string match -r '(\d\d?):(\d\d):(\d\d)' 2:34:56
2:34:56
2
34
56
>_ string match -r '^(\w{2,4})\1$' papa mud murmur
papa
pa
murmur
mur
>_ string match -r -a -n at ratatat
2 2
4 2
6 2
>_ string match -r -i '0x[0-9a-f]{1,8}' 'int magic = 0xBadC0de;'
0xBadC0de
>_ echo $version
3.1.2-1575-ga2ff32d90
>_ string match -rq '(?<major>\d+).(?<minor>\d+).(?<revision>\d+)' -- $version
>_ echo "You are using fish $major!"
You are using fish 3!
>_ string match -raq ' *(?<sentence>[^.!?]+)(?<punctuation>[.!?])?' "hello, friend. goodbye"
>_ printf "%s\n" -- $sentence
hello, friend
goodbye
>_ printf "%s\n" -- $punctuation
.
>_ string match -rq '(?<word>hello)' 'hi'
>_ count $word
0
"pad" サブコマンド¶
string pad [-r | --right] [-C | --center] [(-c | --char) CHAR] [(-w | --width) INTEGER]
[STRING ...]
string pad は、各 STRING の左側に CHAR を追加することで、指定された可視幅まで拡張します。 これは、エスケープシーケンスを除外し、 fish_emoji_width や fish_ambiguous_width を考慮した、すべての可視文字の合計幅を意味します。つまり、ターミナル上でその STRING が占有する列数です。
エスケープシーケンスは fish が認識しているもの、および fish が出力を計算する方法を反映しています。 使用しているターミナルがより多くのエスケープをサポートしている場合や、逆に fish が認識しているエスケープシーケンスをサポートしていない場合もあります。
-C 、 --center が指定された場合、文字列の前後にパディングを追加します。 (必要なパディングの合計が奇数であるために) 完全に中央揃えにすることが不可能な場合、 --right も指定されていない限り、左側に余分なパディングが追加されます。
-r 、 --right が指定された場合、文字列の後にパディングを追加します。
-c 、 --char が指定された場合、空白の代わりに CHAR でパディングします。
出力は、すべての入力文字列の中の最大幅に合わせてパディングされます。 -w 、 --width が指定された場合は、少なくともその幅を使用します。
例¶
>_ string pad -w 10 abc abcdef
abc
abcdef
>_ string pad --right --char=🐟 "fish are pretty" "rich. "
fish are pretty
rich. 🐟🐟🐟🐟
>_ string pad -w$COLUMNS (date)
# Prints the current time on the right edge of the screen.
参照¶
printf コマンドで単純なパディングを行うことができます。 例えば
printf %10s\nはstring pad -w10のように動作します。--visibleオプションを指定した string length を使用すると、 fish が認識している幅を表示できます。
"shorten" サブコマンド¶
string shorten [(-c | --char) CHARS] [(-m | --max) INTEGER]
[-N | --no-newline] [-l | --left] [-q | --quiet] [STRING ...]
string shorten は、各 STRING を指定された可視幅に切り詰め、 省略記号を追加してそれを示します。 「可視幅」とは、エスケープシーケンスを除外し、 fish_emoji_width や fish_ambiguous_width を考慮した、 すべての可視文字の合計幅を意味します。 つまり、ターミナル上でその STRING が占有する列数です。
エスケープシーケンスは fish が認識しているもの、および fish が出力を計算する方法を反映しています。 使用しているターミナルがより多くのエスケープをサポートしている場合や、逆に fish が認識しているエスケープシーケンスをサポートしていない場合もあります。
-m 、 --max が指定された場合、指定された幅で切り詰めます。 それ以外の場合は、すべての入力文字列の中で最小の(0 でない)幅が使用されます。 最大値が 0 の場合は短縮を行わず、すべての STRING をそのまま出力します。
-N 、 --no-newline が指定された場合、各 STRING の最初の行 (--left が指定されている場合は最後の行)のみが使用され、 複数行の場合は省略記号が追加されます。 これは引数として与えられた STRING に対してのみ機能し、 標準入力から与えられた複数行は個別の STRING として解釈されます。
-c 、 --char が指定された場合、省略記号の代わりに CHAR を追加します。 これは空にすることも、2文字以上にすることも可能です。
-l 、 --left が指定された場合、代わりに左側からテキストを削除し、 収まる範囲で最も長い「接尾辞(サフィックス)」を出力します。 --no-newline と組み合わせると、 最初の行ではなく最後の行から取得します。
-q 、 --quiet が指定された場合、 string shorten は戻り値のためだけに実行されます。 短縮されるものがあれば 0 を、なければ 1 を返します。
デフォルトの省略記号は … です。 ロケールの影響でシステムが対応していないと fish が判断した場合は、 代わりに ... を使用します。
戻り値は、短縮が行われた場合は 0、それ以外の場合は 1 です。
例¶
>_ string shorten foo foobar
# No width was given, we infer, and "foo" is the shortest.
foo
fo…
>_ string shorten --char="..." foo foobar
# The target width is 3 because of "foo",
# and our ellipsis is 3 too, so we can't really show anything.
# This is the default ellipsis if your locale doesn't allow "…".
foo
...
>_ string shorten --char="" --max 4 abcdef 123456
# Leaving the char empty makes us not add an ellipsis
# So this truncates at 4 columns:
abcd
1234
>_ touch "a multiline"\n"file"
>_ for file in *; string shorten -N -- $file; end
# Shorten the multiline file so we only show one line per file:
a multiline…
>_ ss -p | string shorten -m$COLUMNS -c ""
# `ss` from Linux' iproute2 shows socket information, but prints extremely long lines.
# This shortens input so it fits on the screen without overflowing lines.
>_ git branch | string match -rg '^\* (.*)' | string shorten -m20
# Take the current git branch and shorten it at 20 columns.
# Here the branch is "builtin-path-with-expand"
builtin-path-with-e…
>_ git branch | string match -rg '^\* (.*)' | string shorten -m20 --left
# Taking 20 columns from the right instead:
…in-path-with-expand
参照¶
string pad はこのコマンドの逆の動作を行い、 特定の幅までパディングを追加します。
printf コマンドで単純なパディングを行うことができます。 例えば
printf %10s\nはstring pad -w10のように動作します。--visibleオプションを指定した string length を使用すると、 fish が認識している幅を表示できます。
"repeat" サブコマンド¶
string repeat [(-n | --count) COUNT] [(-m | --max) MAX] [-N | --no-newline]
[-q | --quiet] [STRING ...]
string repeat [-N | --no-newline] [-q | --quiet] COUNT [STRING ...]
string repeat は STRING を -n 、 --count 回繰り返します。 -m または --max オプションは、出力される文字数(改行を除く) を制限します。 このオプションは、単独で使用することも、 --count と組み合わせて使用することもできます。 --count と --max の両方が指定されている場合、繰り返された最終的な文字列のサイズが max 未満でない限り、最大文字数まで出力されます。サイズが max 未満の場合は、 count に達するまで繰り返されます。 --count と --max はどちらも 0 以上の数値を受け付け、 0 の場合は何も出力されません。 --count 、 --max が明示的に指定されていない場合、最初の引数は COUNT と解釈されます。 -N 、 --no-newline が指定された場合、出力の最後に改行文字は含まれません。 終了ステータス: 生成された文字列が空でない場合は 0、それ以外の場合は 1 です。
例¶
リピートの例¶
>_ string repeat -n 2 'foo '
foo foo
>_ echo foo | string repeat -n 2
foofoo
>_ string repeat -n 2 -m 5 'foo'
foofo
>_ string repeat -m 5 'foo'
foofo
>_ string repeat 2 'foo'
foofoo
>_ string repeat 2 -n 3
222
"replace" サブコマンド¶
string replace [-a | --all] [-f | --filter] [-i | --ignore-case]
[-r | --regex] [(-m | --max-matches) MAX] [-q | --quiet]
PATTERN REPLACEMENT [STRING ...]
string replace は string match に似ていますが、重複しない一致部分を 置換文字列で置き換え、その結果を出力します。 デフォルトでは、 PATTERN は一致させるリテラルな部分文字列として扱われます。
-r 、 --regex が指定された場合、 PATTERN は Perl 互換の正規表現として解釈されます。 また REPLACEMENT には、 t のような C スタイルのエスケープシーケンスや、 $n 、 ${n} による番号または名前でのキャプチャグループへの参照を含めることができます。
-f 、 --filter フラグを指定すると、置換が行われた場合にのみ入力文字列が出力されます。 これは、通常であれば a_cmd | string match pattern | string replace pattern new_pattern という慣用句を使用するような場面で役立ちます。代わりに、単に a_cmd | string replace --filter pattern new_pattern と記述できます。
--max-matches MAX 、 -m MAX を使用すると、 string replace は MAX 行の入力が指定されたパターンに一致した時点で、すべての処理を停止します。 --filter 、 -f を使用している場合、これは出力が MAX 行の長さになることを意味します。 これは長い入力を処理する際、入力ストリームをすべて読み切るよりかなり前に 限定された数の結果が得られることが予想される場合に「早期終了」の最適化として利用できます。
終了ステータス: 少なくとも 1 つの置換が行われた場合は 0、それ以外の場合は 1 です。
リテラル置換の例¶
>_ string replace is was 'blue is my favorite'
blue was my favorite
>_ string replace 3rd last 1st 2nd 3rd
1st
2nd
last
>_ string replace -a ' ' _ 'spaces to underscores'
spaces_to_underscores
正規表現置換の例¶
>_ string replace -r -a '[^\d.]+' ' ' '0 one two 3.14 four 5x'
0 3.14 5
>_ string replace -r '(\w+)\s+(\w+)' '$2 $1 $$' 'left right'
right left $
>_ string replace -r '\s*newline\s*' '\n' 'put a newline here'
put a
here
"split" および "split0" サブコマンド¶
string split [(-f | --fields) FIELDS [-a | --allow-empty]] [(-m | --max) MAX] [-n | --no-empty]
[-q | --quiet] [-r | --right] SEP [STRING ...]
string split0 [(-f | --fields) FIELDS [-a | --allow-empty]] [(-m | --max) MAX] [-n | --no-empty]
[-q | --quiet] [-r | --right] [STRING ...]
string split は、各 STRING をセパレータ SEP (空文字列も可能) で分割します。 -m 、 --max が指定されている場合、各 STRING に対して最大 MAX 回の分割が行われます。 -r 、 --right が指定された場合、分割は右から左へと実行されます。 これは -m 、 --max と組み合わせた場合にのみ役立ちます。 -n 、 --no-empty を使用すると、空の結果は除外されます(例: hello\n\nworld は 3 つではなく 2 つの文字列に展開されます )。終了ステータス: 少なくとも 1 つの分割が行われた場合は 0、それ以外の場合は 1 です。
特定のフィールドを出力するには -f 、 --fields を使用します。 FIELDS は フィールド番号や範囲をカンマで区切った文字列です。各フィールドは 1 から数えられ、 個別の行に出力されます。指定されたフィールドが存在しない場合、 --allow-empty を使用していない限り、コマンドはステータス 1 で終了し、何も出力しません。
read コマンドの --delimiter オプションも参照してください。
string split0 は、各 STRING をヌルバイト(NUL) で分割します。 オプションは、セパレータを指定しない点を除いて string split と同じです。
split0 には、コマンド置換で使用された際に出力がさらに分割されないという重要な性質があります。 これにより、コマンド置換で改行を含む要素を生成することが可能になります。 これは、 find -print0 や sort -z のようなヌルバイトを生成する Unix ツールと一緒に使用する場合に非常に便利です。 後述の split0 の例を参照してください。
コマンドライン引数に NUL を含めることはできないため、 string split0 にはコマンド置換ではなく パイプ経由でデータを渡す必要があることに注意してください。
例¶
>_ string split . example.com
example
com
>_ string split -r -m1 / /usr/local/bin/fish
/usr/local/bin
fish
>_ string split '' abc
a
b
c
>_ string split --allow-empty -f1,3-4,5 '' abcd
a
c
d
NUL 区切りの例¶
>_ # Count files in a directory, without being confused by newlines.
>_ # Note: Don't use `string split0 (find . -print0)`, because arguments cannot include NUL.
>_ count (find . -print0 | string split0)
42
>_ # Sort a list of elements which may contain newlines
>_ set foo beta alpha\ngamma
>_ set foo (string join0 $foo | sort -z | string split0)
>_ string escape $foo[1]
alpha\ngamma
"sub" サブコマンド¶
string sub [(-s | --start) START] [(-e | --end) END] [(-l | --length) LENGTH]
[-q | --quiet] [STRING ...]
string sub は、各文字列引数の部分文字列を出力します。 部分文字列の開始/終了位置は、 -s/-e 、 --start/--end に続けて、 1 から始まるインデックス値で指定できます。 正のインデックス値は文字列の先頭から、 負のインデックス値は文字列の末尾からの相対位置を表します。 デフォルトの開始値は 1 です。 部分文字列の長さは -l 、 --length で指定できます。 長さまたは終了位置が指定されていない場合、部分文字列は各 STRING の末尾まで続きます。 終了ステータス: 少なくとも 1 つの部分文字列操作が実行された場合は 0、それ以外の場合は 1 です。 --length と --end は同時には指定できません。
例¶
>_ string sub --length 2 abcde
ab
>_ string sub -s 2 -l 2 abcde
bc
>_ string sub --start=-2 abcde
de
>_ string sub --end=3 abcde
abc
>_ string sub -e -1 abcde
abcd
>_ string sub -s 2 -e -1 abcde
bcd
>_ string sub -s -3 -e -2 abcde
c
"trim" サブコマンド¶
string trim [-l | --left] [-r | --right] [(-c | --chars) CHARS]
[-q | --quiet] [STRING ...]
string trim は、各 STRING の先頭と末尾にある空白文字を削除します。 -l 、 --left が指定された場合、先頭の空白文字のみが削除されます。 -r 、 --right が指定された場合、末尾の空白文字のみが削除されます。
-c 、 --chars スイッチを指定すると、空白文字の代わりに CHARS に含まれる文字セットが削除されます。 これは文字のセットであり、文字列ではありません。 例えば -c foo を渡すと、 「foo」という並びだけでなく、すべての「f」と「o」が削除されます。
終了ステータス: 少なくとも 1 つの文字が削除された場合は 0、それ以外の場合は 1 です。
例¶
>_ string trim ' abc '
abc
>_ string trim --right --chars=yz xyzzy zany
x
zan
"upper" サブコマンド¶
string upper [-q | --quiet] [STRING ...]
string upper は、各文字列引数を大文字に変換します。終了ステータスは、少なくとも 1 つの文字列が大文字に変換された場合は 0、それ以外の場合は 1 となります。-q フラグと組み合わせることで、文字列が既に大文字であるかどうかを簡単にテストできます。
正規表現¶
match および replace サブコマンドは、 -r 、 --regex オプションを使用することで正規表現をサポートします。 方言は PCRE2 のものです。
一般に、特殊文字はデフォルトで特殊な意味を持ちます。 例えば a+ は 1 つ以上の「a」に一致し、 a\+ は「a」の後の「+」に一致します。 (a+) はキャプチャグループ内の 1 つ以上の「a」に一致します((?:XXXX) は非キャプチャグループを表します )。 replace の置換パラメータでは、 $n は一致した n 番目のグループを参照します。 一致パラメータ内では、 \n (例: \1)はグループを前方参照します。
繰り返しに関する機能:
*前の式の 0 回以上の繰り返し+1 回以上?0 回または 1 回。{n}ちょうど n 回(n は数値 ){n,m}n 回以上 m 回以下。{n,}n 回以上
文字クラス(主なもの ):
.改行を除く任意の文字\d10 進数字、\D10 進数字以外\s空白文字、\S空白文字以外\w「単語」構成文字、\W非単語文字[...](「...」は任意の文字)文字セット[^...]指定された文字セットの補集合(否定 )[x-y]x から y までの文字範囲[[:xxx:]]名前付き文字セット[[:^xxx:]]名前付き文字セットの否定[[:alnum:]]: 英数字(alphanumeric )[[:alpha:]]: 英字(alphabetic )[[:ascii:]]: ASCII 文字(0-127 )[[:blank:]]: スペースまたはタブ[[:cntrl:]]: 制御文字[[:digit:]]: 10 進数字[[:graph:]]: 表示可能文字(スペースを除く )[[:lower:]]: 小文字[[:print:]]: 表示可能文字(スペースを含む )[[:punct:]]: 記号(表示可能文字から英数字を除いたもの )[[:space:]]: 空白文字[[:upper:]]: 大文字[[:word:]]:\wと同じ[[:xdigit:]]: 16 進数字
グループ:
(...)キャプチャグループ(?:...)非キャプチャグループ\n後方参照(n は 1 から始まるグループ番号 )$n置換式から一致式のグループへの参照
その他の機能:
\b単語の境界、\B単語の境界以外^文字列または行の先頭、$末尾|選択(alternation)、すなわち「OR」
他のツールとの比較¶
string がサポートするほとんどの操作は、外部ツールでも実行可能です。 これには grep, sed, cut などが含まれます。
これらのツールに慣れている場合は、 string がそれらとどのように異なるかを知っておくと役立ちます。
これらの古典的なツールとは対照的に、 string は標準入力または引数のいずれかから入力を読み込みます。 また、 string はファイルを直接扱わないため、ファイルを使用するにはリダイレクトが必要です。
grep とは対照的に、 string の match はデフォルトでグロブモードであり、 replace はデフォルトでリテラル照合です。 正規表現モードに設定した場合、 これらは PCRE 正規表現を使用します。これは grep の -P オプションに相当します。 match はデフォルトで一致した部分のみを出力します。これは grep -o と同様です (grep のような挙動を有効にするには --entire を使用してください )。
sed の s/old/new/ コマンドと同様に、 string replace も一致しない文字列を出力します。 sed -n と /p 修飾子やコマンドの組み合わせは、 string replace -f に相当します。
string split somedelimiter は、 tr somedelimiter \n の代わりになります。
