Поскольку вы упомянули ctrl-C, я предполагаю, что вы хотите использовать его в интерактивном терминале. Таким образом, вы можете просто дождаться ввода.
$ read
или просто используйте произвольные другие команды, которые читаются из stdin, такие как cat
. Они ничего не делают до тех пор, пока нет входных данных.
$ cat >/dev/null
или даже лучше без использования stdin:
$ tail -f <<EOF
EOF
GNU sed подход:
-- начиная со строчной буквы:
s="information"
sed 's/\(.\)\(.\)/\L\1\U\2/g' <<< $s
iNfOrMaTiOn
-- начиная с прописной буквы:
s="information"
sed -E 's/(.)(.){,1}/\U\1\L\2/g' <<< $s
InFoRmAtIoN
\L
- Превратите замену в нижний регистр, пока найдено \U
или \E
\U
— переводить замену в верхний регистр, пока не появится \L
или \E
найдено
gawk (GNU awk) подход:
awk -v FPAT="[a-z]" '{ s=""; for(i=1;i<=NF;i++) { s=s""((i%2)? toupper($i) : $i)} print s }' <<< $s
InFoRmAtIoN
FPAT="[az]"
- шаблон, представляющий значение поля Другой вариант awk с использованием split()
функция:
awk '{ n=split($0,a,""); s="";
for(i=1;i<=n;i++) { s=s""((i%2)? toupper(a[i]): tolower(a[i])) } print s }' <<< $s
InFoRmAtIoN
split()
возвращает количество созданных элементов POSIXly
awk '
{
for(i = 1; i <= length; i++) {
c = substr($0, i, 1)
printf "%s", (i%2 ? toupper(c) : tolower(c))
}
print ""
}' < words.txt
perl -pe '
($_ = lc) =~ s/([a-z])([^a-z]*)(.)/\L$1$2\U$3/g;
$_ .= y/a-zA-Z/A-Za-z/r;
'
y
, также известной как tr
, чтобы получить обе версии. s="InformatioN"; эхо "$s" | perl -pe '....'
iNfOrMaTiOn
InFoRmAtIoN