1-е решение: ИМХО, если вы спросите меня простое решение, то я бы go для awk
. Если ваш Input_file содержит только 4 поля, просто сделайте это, просто присвойте значения 3 полям.
awk '{$1=$2=$3="****"} 1' Input_file
2-е решение: С sed
(это может быть так, как ОП пытался написать). Использование возможности sed
использовать временный буфер для хранения соответствующего регулярного выражения, а затем заменить его на ****
при замене.
sed 's/\([^ ]*\) \([^ ]*\) \([^ ]*\) \(.*\)/**** **** **** \4/' Input_file
3-е решение: Используйте rev
, чтобы напечатать обратный файл Input_file, затем сначала поймать (что на самом деле является последним полем в файле Input_file), а затем вывести 3 раза ****
и снова распечатать его в обратном порядке, который теперь будет печататься в его фактической форме:)
rev Input_file | sed 's/\([^ ]*\).*/\1 **** **** **** ****/' | rev
4-е решение: Более универсальное c решение, в котором сотрудник может указать диапазон номеров полей, из какого поля, в каком поле пользователь хочет изменить значение на ****
, затем попробуйте следующее (from
и to
- переменные, которые могут быть установлены человеком для изменения значений в соответствии с номерами полей).
awk -v from="1" -v to="3" '{for(i=from;i<=to;i++){$i="****"}} 1' Input_file