これについてのアイデアがあります。逆参照を使用する必要がありますgrep
が、これが私が得ることができる最も近いものです。
grep "^[a-zA-z]\$[a-zA-z]\
私の問題は、最初の文字==を最後の文字として確認する方法がわからないことです。
答え1
あなたはする必要があります
grep -E '^([a-zA-Z]).*\1$'
最初の文字をキャプチャし(...)
、逆参照を最後の文字として使用し、その間の他のすべての文字はスキップされます.*
。この-E
スイッチは拡張正規表現一致するため、コマンドの範囲内でキャプチャグループをエスケープする必要はありませんgrep
。ただし、次のようにして移植性を向上させることもできます。
grep '^\([a-zA-Z]\).*\1$'
単一の文字を含む行のみを出力したい場合(ただし、同じ最初の文字と最後の文字とも呼ばれます)、オプションでその文字の存在を定義できます。
grep -- '^\([a-zA-Z]\)\(.*\1\)\{0,1\}$'
\{0,1\}
一致しないか、一度だけ一致模様 .*\1
以上。
またはこれをそれぞれ一致させてください。一つ上記のバイト文字は次のとおりです。
grep -- '^\(.\)\(.*\1\)\{0,1\}$'
(Basic-Regular-Expression、BRE)パターンマッチングはデフォルトでgrep
使用されます。ここで、、、、--basic-regexp
などのメタ文字は特別な意味を失い、文字通り一致します。変換定義タイプを使用する必要があります。 、およびまたは単に切り替えてください。?
+
{
|
(
)
\?
\+
\{
\|
\(
\)
パターンマッチングEREに接続します-E
(ただし、POSIX EREには逆参照はありません)。
文字列の長さが同じであることを確認する窒素:
grep -- '^\([a-zA-Z]\{N-HERE\}\)\(.*\1\)\{0,1\}$'
絵サム文字の長さ:
grep -- '^\([a-zA-Z]\{3\}\)\(.*\1\)\{0,1\}$'
前述のように、次の行が返されます。サム(窒素一般的に)文字の長さxxx
、必要でない場合は次のように変更してください。
grep -- '^\([a-zA-Z]\{3\}\).*\1$'
答え2
awk
これは、テキスト行を扱う場合に最も明白です。
awk 'length>1 && substr($0,1,1)==substr($0,length,1)' file
これがシェル変数の場合:
case $var in ''|?) echo no;; "${var#"${var%?}"}"*) echo yes;; *) echo no;; esac
[ "${#var}" -gt 1 ] && [ "${var%"${var#?}"}" = "${var#"${var%?}"}" ]
答え3
シェルはテストを簡単に実行できますが、なぜgrep
外部ユーティリティを使用するのですか?awk
文字列に複数の文字が含まれているとします。文字列に1つの文字しか含まれていない場合は、最後の文字が最初の文字と同じであると主張できますが、OPの質問は2つ以上の文字を含む文字列に関するものだと思います。
#!/bin/bash
# set -x
# set -v
is_match() {
(( ${#1} < 2 )) && return 1
[[ "${1:0:1}" != "${1: -1}" ]] && return 1
return 0
}
check() {
if is_match "$1"
then
echo "\"$1\" is a match"
else
echo "\"$1\" is not a match"
fi
}
check ""
check "a?"
check "a*"
check "a"
check "cdc"
check "abbba"
check "é"
check "étéa"
check "été"
出力:
"" is not a match
"a?" is not a match
"a*" is not a match
"a" is not a match
"cdc" is a match
"abbba" is a match
"é" is not a match
"étéa" is not a match
"été" is a match
答え4
現在のレコードを空の文字列に分割し、最初のフィールドを最後のフィールドと比較します。
$ echo "racecar" \
| gawk -F "" '$1 == $NF'
racecar
GNU awk
このアーティファクトは@ Ed Mortonが指摘したとおりに機能します。