У меня была та же проблема, возможно, немного "глубже": до уровня точки монтирования. Если кому-то интересно, вот две функции, которые я использую, для запроса в обе стороны.
######## FIND THE LVPATH of an existing FS. Query the lvm using FS' mount point
fileSystem_to_lvPath(){
FS_TO_QUERY=$1
#Call like this: $0 /tmp
#Relevant commands for debug: blkid, lsblk, dmsetup, lvdisplay, lvs
#OLD Solution: DEV_MAPPER=$(df -l --output=source $1 | awk '{print $1}' | cut -d"/" -f 4 | tail -1)
#Find DeviceMapper_MajorMinorNumber for specific fs
DeviceMapper_MajorMinorNumber=$(lsblk --noheadings --output TYPE,MAJ:MIN,MOUNTPOINT | grep -w lvm | grep -w $FS_TO_QUERY | awk '{print $2}')
#VG=$(lvs --noheadings --separator : --options lv_kernel_major,lv_kernel_minor,vg_name,lv_name,lv_path | grep $DeviceMapper_MajorMinorNumber | awk -F : '{print $3}')
#LV=$(lvs --noheadings --separator : --options lv_kernel_major,lv_kernel_minor,vg_name,lv_name,lv_path | grep $DeviceMapper_MajorMinorNumber | awk -F : '{print $4}')
LV_PATH=$(lvs --noheadings --separator : --options lv_kernel_major,lv_kernel_minor,vg_name,lv_name,lv_path | grep $DeviceMapper_MajorMinorNumber | awk -F : '{print $5}')
echo $LV_PATH
#echo "$VG/$LV"
}
и обратного запроса:
######## FIND THE FS (and FS' mountpoint) of an existing LVPATH:
lvPath_to_fileSystem(){
LV_PATH=$1
#Call like this: $0 /dev/vg00/opt
#Relevant commands for debug: blkid, lsblk, dmsetup, lvdisplay, lvs
#OLD Solution: DEV_MAPPER=$(df -l --output=source $1 | awk '{print $1}' | cut -d"/" -f 4 | tail -1)
#Find DeviceMapper_MajorMinorNumber for specific lv_path
DeviceMapper_MajorMinorNumber=$(lvs --noheadings --separator : --options lv_kernel_major,lv_kernel_minor,vg_name,lv_name,lv_path | grep $LV_PATH | awk -F : '{print $1":"$2}')
FS=$(lsblk --noheadings --output TYPE,MAJ:MIN,MOUNTPOINT | grep -w lvm | grep -w $DeviceMapper_MajorMinorNumber | awk '{print $3}')
echo $FS
}
awk '{sub(/^>._|^>...._/,">")}1' file
>CR-B_CR56_t
MTKIIKFVYFMTIFISPNHHCPVYNCTHPKQPWCKLVRLQLLFHGSLIGLCDCI
>R-B_R46_t
MVEVTKLVNVMLIFLTLSPLVYDCQAYECELPFKPDCLMVEYSPQFVALRCGCV
>N-N274_M
MVEVTKLVNVMLIFLTLFVYTDSDCQAYACELPFKPDCLMVEYAPQFFRLACGCV
command:sed 's/^>[0-9]\{1,9\}\_/>/g' filename
выход
>CR-B_CR56_t
MTKIIKFVYFMTIFISPNHHCPVYNCTHPKQPWCKLVRLQLLFHGSLIGLCDCI
>R-B_R46_t
MVEVTKLVNVMLIFLTLSPLVYDCQAYECELPFKPDCLMVEYSPQFVALRCGCV
>N-N274_M
MVEVTKLVNVMLIFLTLFVYTDSDCQAYACELPFKPDCLMVEYAPQFFRLACGCV
Незначительное изменение вашей команды sed
:
sed 's/^>[0-9]\+[_]/>/g'
s
— это команда sed replace , она ищет строку в левой части и заменяет ее строкой в правой части. Вместо того, чтобы заменять его ничем, вы можете заменить его символом >
, который вы хотели бы сохранить.
^
используется для указания того, что совпадение должно начинаться только с начала новой строки
Кроме того, *
используется для сопоставления более чем одной цифры.