Предполагая (как указано), что файл состоит из строки и строки, являются IP
с 1 IP на строку
sed 's/.[^.]*/0/' YourFile
С несколькими IP на строку
sed 's/\([0-9]\{1,3\}[.]\)[^.]*\(\([.][[:alnum:]]\{1,\}\)\{2\}\)/\1.0\2/g' YourFile
Попробуйте это, используя xmlint с выражением xpath :
#!/bin/sh
for xml in *.xml; do
bool=$(xmllint --xpath 'count(//*)=1 and string-length(//*[1])=1' "$xml")
if [ $bool = true ]; then
echo "$xml" >> xml_list_files
fi
done
cat xml_list_files
Выражение проверяет, что файл имеет только один узел без какого-либо текстового содержимого. В этом случае команда возвращаетtrue
to identify and write all xml file names which are empty to a text file for reporting purpose
find
+xmlstarlet
раствор:
find. -type f -name "*.xml" -exec bash -c \
'v=$(xmlstarlet sel -t -i "count(//*)=1 and //*[1][not(normalize-space())]" -o 1 -b $1);
[[ -n "$v" ]] && echo "$1" >> "empty_xml.txt"' _ {} \;
empty_xml.txt
файл должен содержать список необходимых имен файлов/путей к файлам