複数行の文字列変数で最後の文字を置き換えようとしています。
最後の|
もの`
。
ベストアンサー1
貪欲な事実を使うことができます.*
。
sed 's/\(.*\)|/\1`/'
または以下を使用してください。
sed 's/|\([^|]*\)$/`\1/'
|
Tobyが示すように、タイル行の終わりを含まない項目は後に続きますが、|
この方法は単一文字置換にのみ機能します。
GNUを使用して複数行の文字列シェル変数でそれを置き換えるには、入力を改行区切りではなくNUL区切りとして扱うオプションをsed
使用できます。-z
var=$(printf %s "$var" | sed -z '...')
別のアプローチは、置換のために標準パラメータ拡散演算子を使用することです。
case $var in
(*'|'*) var=${var%'|'*}'`'${var##*'|'}
esac
または、sed
次のコマンドを対応するシェルコマンドに変換します。
存在するksh93
:
var=${var/@(*)'|'/\1'`'}
var=${var/%'|'*([^'|'])/'`'\1}
In bash
(文字列に現在のロケールで有効な文字を形成しない一連のバイトが含まれていないと仮定):
re='(.*)\|(.*)'
[[ $var =~ $re ]] && var=${BASH_REMATCH[1]}'`'${BASH_REMATCH[2]}
存在するzsh
:
set -o extendedglob
var=${var/(#b)(*)'|'/$match[1]'`'}
var=${var/%(#b)'|'([^'|']#)/'`'$match[1]}