Вы всегда можете сделать (поскольку вы уже используете GNU sed
( -i
)):
sed -i -f - FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF
-f -
указывает sed
читать сценарий sed из стандартного ввода-вывода.
Если вы хотите повторно использовать один и тот же сценарий для нескольких файлов в Linux (и только в Linux), с оболочкой типа bash
, zsh
, ksh
который реализует здесь документы с временными файлами (в отличие от каналов типа dash
или yash
) и все еще с GNU sed
, вы можете сделать:
find . -name '*.conf' -exec sed -i -f /dev/stdin {} + << EOF
s/BASE_64/$BASE_64/g
EOF
В Linux (и только для Linux), / dev / stdin
не означает stdin так же, как -
.Вместо этого это символическая ссылка на файл, открытый на стандартном вводе, поэтому каждый раз, когда sed
открывает его, он открывает файл заново с самого начала. Вышеупомянутая команда будет работать нормально в других системах (которые имеют / dev / stdin
) или с оболочками, реализующими здесь-документы с каналами, но только если имеется достаточно мало файлов conf
, которые sed
вызывается только один раз. При повторном вызове в системах, отличных от Linux, например, -f -
, / dev / stdin
будет отображаться пустым, поскольку он уже был прочитан при первом вызове.
busybox
sed
также поддерживает -i
так же, как GNU sed
, но не поддерживает -f -
. Так что вы в любом случае захотите использовать там -f / dev / stdin
. В FreeBSD sed
используйте:
sed -i '' -f /dev/stdin FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF
Ключевым моментом здесь является использование программы колонки, см. человек 1 столбец
Это позволит вам выравнивать данные по мере необходимости с помощью нескольких простых опций, таких как определение разделителя
Вы также можете взглянуть на этот вопрос :Форматирование списков с помощью команды столбца в *nix
Вы можете сделать это, как показано:
grepFile | column -t -s $'\t' -o $'\t'
При условии, что функция grepFile была изменена в соответствии с моими предложениями, как указано.
Создайте еще одну определяемую пользователем -функцию, скажем, "alignCols" и передайте ей вывод вашей функции "grepFile".
Кроме того, немного измените функцию "grepFile" в операторе printf
:
function grepFile
{
#*************** ADD THIS ********
t=$'\t'; # TAB char
#*********************************
printf "ISA\t\tGS\tTrans\tSender ID\tReceiver ID\tINV PO Number\tASN PO Number\n"
#*************** MODIFY THIS ********
fmt="%s\t%s\t%s\t%s\t%s\t%s\t%s\n"
#*********************************
while read -r LINE
do
#... keep the other statements just like before #
# ************** MODIFY printf ****************
printf "$fmt" \
"${isa:-$t}" \
"${gs:-$t}" \
"${trans:-$t}" \
"${sender:-$t}" \
"${receiver:-$t}" \
"${bigponumber:-$t}" \
"${asnponumber:-$t}";
# *********************************************
done < /path/to/Files.txt
rm /path/to/Files.txt
}
function alignCols
{
sed -e '
1i\
.TS\
tab('$'\t'');\
l l l l l l l.
$a\
.TE
' - | tbl - | nroff -Tascii -ms | grep.
}
# And then...
grepFile | alignCols
ISA GS Trans Sender ID Receiver ID INV PO Number ASN PO Number
100000107 1107 1 2035735845 AMAZON 2IJW4EUG
100000018 1018 1 00116520M 5032337598 0082313829
100000096 1096 7 001165208 6111470100 0026-7684347-0551
0026-7684347-0557
0026-7684347-0580
0026-7684347-0587
0026-7684347-0589
0026-7684347-3803
0026-7684347-3804
100000580 1580 6 2035735845 TGTDVS 1310548379
1310570020
1310590953
1310596065
1310598477