awk для удаления строки из переменной

Если у вас не установлены пакеты zip и unzip и у вас есть java, вы можете использовать jar для распаковки:

jar -xf file.zip
0
01.04.2015, 14:34
3 ответа

Вам нужен Sub (Sub stiTute ), а не в Substr (Sub string ) Команда ): сравните

$ awk -v name="abc.txt" 'BEGIN {substr("c","",name) ; print name}'
abc.txt

с

$ awk -v name="abc.txt" 'BEGIN {sub("c","",name) ; print name}'
ab.txt

Однако, если вы не делаете это как упражнение программирования для изучения AWK , на самом деле нет причин, чтобы не использовать вашу оболочку для таких вещей, например, В Bash :

newname="${name%c.*}.${name##*.}"

образует строку из имя с кратчайшим конечным совпадением, начиная с c. Удалены, объединены с удлинением точек, образованного путем удаления самой длинной части, соответствующей до .

3
28.01.2020, 02:15

Почему вы используете awk для этого? Если у вас есть оригинал, так и целевое имя, почему бы не только MV abc.txt regperl / ab.txt ?

Если у вас нет целевого имени и просто хочу удалить символ из Оригинал, вы можете сделать это в оболочке. Опять же, нет необходимости в :

file="abc.txt"; mv "$file" begperl/"${file//c}"

, которые удаляют все вхождения C из $ файла . Чтобы удалить только первый, используйте

file="abc.txt"; mv "$file" begperl/"${file/c}"

. В качестве альтернативы, вы могли бы сделать

mv abc.txt begperl/"$(echo "abc.txt" | sed 's/c//')"
3
28.01.2020, 02:15

Я ОП. Я не думаю, что это так легко, как я думал, это будет реализовано в одном лайнере. Я думаю, что я буду работать над этим вкладышем позже (или никогда; -))

#!/usr/bin/ksh
ORIGINAL_FILE_NAME_WITH_PATH_VARIABLE=$1
REMOVE_STRING_VARIABLE=$2
DELETE_ORIGINAL_FILE_NAME_WITH_PATH_VARIABLE=$3
if [[ $# -ne 3 ]]
then
echo "Script requires three parameters. First:Filename with path. Second:String to remove from filename. Third:Y or N to delete file"
exit 1
fi
ORIGINAL_FILE_NAME_VARIABLE=`echo  ${ORIGINAL_FILE_NAME_WITH_PATH_VARIABLE} | awk -F '/' '{print $NF}'`
#echo ${ORIGINAL_FILE_NAME_VARIABLE}
AMENDED_FILE_NAME_VARIABLE=`echo ${ORIGINAL_FILE_NAME_VARIABLE} | sed "s/${REMOVE_STRING_VARIABLE}//g"`
#echo ${AMENDED_FILE_NAME_VARIABLE}
ORIGINAL_FILE_LOCATION_DIR=`echo ${ORIGINAL_FILE_NAME_WITH_PATH_VARIABLE} | awk 'BEGIN{FS=OFS="/"}{$NF=""; NF--; print}'`
if [[ -f ${ORIGINAL_FILE_LOCATION_DIR}/${AMENDED_FILE_NAME_VARIABLE} ]]
then
AMENDED_FILE_NAME_VARIABLE=${AMENDED_FILE_NAME_VARIABLE}_$$_$$
fi
echo ${ORIGINAL_FILE_NAME_VARIABLE}|grep -q ${REMOVE_STRING_VARIABLE}
if [[ $? -ne 1 ]] 
then
cp ${ORIGINAL_FILE_NAME_WITH_PATH_VARIABLE} ${ORIGINAL_FILE_LOCATION_DIR}/${AMENDED_FILE_NAME_VARIABLE}
if [[ ${DELETE_ORIGINAL_FILE_NAME_WITH_PATH_VARIABLE} = 'y' || ${DELETE_ORIGINAL_FILE_NAME_WITH_PATH_VARIABLE} = 'Y' ]]
then
rm ${ORIGINAL_FILE_NAME_WITH_PATH_VARIABLE}
fi
fi

Но я действительно думал, что это возможно в одном лайнере. Я OP.comments?

0
28.01.2020, 02:15

Теги

Похожие вопросы