回答:
これも仕事をします:
echo "$pid"|awk '{print $2}'
awk -F": " '{print $2}'
。試してください。それでも、私のお気に入りのソリューションではありません。
以下はうまくいくはずです:
var="pid: 1234"
var=${var:5}
よろしいですbash
シェルは、スクリプトを実行していますか?
POSIX準拠でも
var=${var#?????}
固定長パターンの形式で5をハードコーディングする必要がありますが、外部プロセスを使用するよりも望ましいでしょう。
${var:5:2}
始まり1
、戻り12
ます。
を使用して最初のX文字を切り取る簡潔な方法を次に示しcut(1)
ます。この例では、5番目の文字で始まる部分文字列をカットして、最初の4文字を削除します。
echo "$pid" | cut -c 5-
git log --pretty=oneline | cut -c 42- | head
cut -c ${LEN}-
。中括弧は、文字列を有効な変数文字と連結するために使用され、変数とは何か、そうでないものを区別します。これに関する詳細が必要な場合は、「bash変数の文字列の連結」を調べて、理由/動作の詳細を確認してください。
構文を使用するには、-r
オプション(「スクリプトで拡張正規表現sed
を使用する」)を使用し{n}
ます。
$ echo 'pid: 1234'| sed -r 's/^.{5}//'
1234
sed -r 's/.{5}$//'
代わりに最後の5文字を取り除くことができます
-r
(-E
OS XではIIRC)なしでそれを行うことができます(ただし、それがOS Xで機能するかどうかはわかりません)。
-r
/ -E
OS Xで動作します)
文字列から最初の2文字を切り取ります。
$ string="1234567890"; echo "${string:2}"
34567890
たぶん、あなたも持っcut
ているでしょう。その場合:
[me@home]$ echo "pid: 1234" | cut -d" " -f2
1234
cut
は、空白のシーケンスをtr -s ' '
適切に処理しないことです。スペースを「圧縮」するために使用すると、動作が改善されます。
この質問によって提供された純粋なsedで答えを見つけました(確かに、この質問が投稿された後に投稿されました)。これは、sedでのみ、あなたが要求したことを正確に実行します。
result=\`echo "$pid" | sed '/./ { s/pid:\ //g; }'\``
)のドットはsed '/./
、一致させたいものです。あなたの質問は、私がファイルの特定の行と一致させてコメントを外したかった場合を除いて、まさに私が試みていたものです。私の場合、それは:
# Uncomment a line (edit the file in-place):
sed -i '/#\ COMMENTED_LINE_TO_MATCH/ { s/#\ //g; }' /path/to/target/file
-i
後は、sed
(あなたが前のファイルを編集するには、あなたのマッチング表現をテストしたい場合は、このスイッチを削除する)の場所にファイルを編集することです。
(私はこれを投稿しました。なぜなら、この質問が尋ねられ、以前の回答でその問題が解決されなかったため、sedで完全に実行したかったからです。)
最初からn文字を削除するのではなく、数字を直接抽出することもできます。そのようです...
$ echo "pid: 1234" | grep -Po "\d+"
これはより堅牢なソリューションであり、より直感的に思えます。
${string:5}
動作しない場合は、Bashまたはその構文をサポートする別のシェルを使用していません。どのシェルとバージョンを使用していますか?あなたのシバンはどのように見えますか?私の推測では、sh
(などdash
)またはおそらくを使用していますzsh
。