Нельзя использовать позиционные параметры с псевдонимом.
Команда, которую вы запускаете с этим псевдонимом,:
ps ax | grep | cut -f1 -d' ' | xargs kill something
Вам нужно сделать это функцией.
Гораздо длиннее вашего кода, но вот похожая функция, которую я использую:
smash () {
local T_PROC=$1
local T_PIDS=($(pgrep -i "$T_PROC"))
if [[ "${#T_PIDS[@]}" -ge 1 ]]; then
echo "Found the following processes:"
for pid in "${T_PIDS[@]}"; do
echo "$pid" "$(ps -p "$pid" -o comm= | awk -F'/' '{print $NF}')" | column -t
done
if ( yorn.ask "Kill them?" ); then
for pid in "${T_PIDS[@]}"; do
echo "Killing ${pid}..."
( kill -15 "$pid" ) && continue
sleep 2
( kill -2 "$pid" ) && continue
sleep 2
( kill -1 "$pid" ) && continue
echo "What the hell is this thing?" >&2 && return 1
done
else
echo "Exiting..."
return 0
fi
else
echo "No processes found for: $1" >&2 && return 1
fi
}
yorn.ask
— это отдельная функция, которую я использую:
yorn.ask () {
read -p "$@ [Y/n]: " RESP && local YORN_RESP="$(echo "${RESP:0:1}" | grep -i "[YN]")"
while [[ -z "$YORN_RESP" ]]; do
echo "Please respond only with: y or n"
read -p "$@ [Y/n]: " RESP && local YORN_RESP="$(echo "${RESP:0:1}" | grep -i "[YN]")"
done
[[ "$YORN_RESP" == 'Y' || "$YORN_RESP" == 'y' ]] && return 0 || return 1
}
awk 'NR%2==0{$0=$0"\nhello"}1' filename
выход
my1line
my2line
hello
my3line
my4line
hello
my5line
my6line
hello
my7line
my8line
hello
С Gnu sed
и его step operator
. Тест с:
seq 100 | sed '3~2 s/.*/hello\n&/'
Или со стандартным sed
. Тест с:
seq 100 | sed 'n;s/.*/&\nhello/;'
Конечно, используйте ваш файл в качестве входных данных. Таким образом, предыдущий пример становится:
sed 'n;s/.*/&\nhello/;' datafile
С GNU sed n -skip -m оператор адреса:
sed '2~2a hello' textfile
Используйте опцию -i
, если вы хотите отредактировать файл в месте -.
awk '1; !(NR%2) {print "hello"}' file
Печатать каждую строку. Печатайте «привет» в каждой второй строке.