Существует множество способов сделать это, включая следующий (при использовании GNU xargs
):
sed -e '/^[[:space:]]*$/d' -e 's/$/.txt/' fileNames.txt | xargs -rd '\n' touch --
Это предполагает, что в файле fileNames.txt есть только одно имя файла в строке. Сценарий sed
удаляет пустые строки (спасибо @rubynorails) и добавляет '.txt' в конец каждого имени файла перед передачей их в xargs touch
.
При использовании опции -d '\n'
в xargs (расширение GNU, которое указывает xargs
использовать только новую строку или '\n' в качестве разделителя, а не любые пробельные символы, и отключает обработку кавычек) это даже справляется с именами файлов, содержащими пробелы и другие потенциально проблемные символы (кроме \n
или самой новой строки). Например, если строка содержит 'abet able', то без -d '\n'
будет создано два файла (abet
и able.txt
). С ним будет создан только один файл abet able.txt
.
Используйте для этого sed
:
$ sed -E 's/ (([0-9]{1,3}\.){3})[0-9]{1,3} / \1x /' file
Somestring 1.2.3.x more charachters and strings
Somestring 1.2.3.x more charachters and strings
Somestring 1.2.3.x more charachters and strings
Это ищет пробел, за которым следуют три набора из[0-9]{1,3}\.
(числа от одной до трех цифр, за которыми следует точка ), которая захватывается в \1
. Затем мы также заменяем последний набор [0-9]{1,3}
и последний пробел. Все это заменяется на ␣\1x␣
, где \1
— первая группа из трех чисел и точек.
Если вы действительно хотите сделать это в awk
, вам нужно привязать выражение -, и вам нужно только sub
, а не gsub
, так как это одна замена, например.
awk '{sub(/\.[0-9][0-9]?[0-9]?$/,".x",$2)} 1' input
Somestring 1.2.3.x more charachters and strings
Somestring 1.2.3.x more charachters and strings
Somestring 1.2.3.x more charachters and strings
С некоторыми реализациями вы можете использовать ERE [0-9]{1,3}
для повторения цифр.
awk '{sub(/.$/,"x",$2)}1' file
Somestring 1.2.3.x more charachters and strings
Somestring 1.2.3.x more charachters and strings
Somestring 1.2.3.x more charachters and strings