打印字符串的所有前缀,并将其从python转换为bash

2024-09-16 06:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个shell脚本,它需要获取一个.so并获取其所有前缀,其中前缀是名称的一部分,直到".so"部分+下一部分直到"."

例如:对于'example.so.1',我们将使用以下前缀:'example.so', 'example.so.1'

我有一个python(3)代码来实现这一点,我想得到一个bash等价物


Python源代码的Bash包装器:

#!/bin/bash


dst='/tmp'
for src in 'example.so' 'example.so.1' 'example.so.1.2' 'example.so.1.2.3'; do
python3 -c "
import os, sys, itertools as it, re;
so_path = os.path.abspath(sys.argv[1]);
dst = sys.argv[2];
so = os.path.basename(so_path);
so_name = so.split('.')[0];
regex = '\.\w+';
for suffix in it.accumulate(re.findall(regex, so)):
    dst_so = os.path.join(dst, so_name + suffix)
    print('src: {}. dst: {}'.format(so_path, dst_so))
" "${src}" "${dst}";
done

这是我在bash中使用awk的试用(它还没有完成,只打印源代码。我一直在调整它,但无法让它完全按照我的要求执行):

#!/bin/bash

dst='/tmp'
delimiter='.'
for src in 'example.so' 'example.so.1' 'example.so.1.2' 'example.so.1.2.3'; do
    for nubmer_of_delimiters in `seq $(echo ${src} | grep ${delimiter} | wc -l)`; do
        echo ${src} :: ${src} | awk -F. '{print $nubmer_of_delimiters}';
    done
done

实现这一目标的最佳方式是什么?(我猜是awk,尽管我确实尝试使用了一些ogcut, sed, etc.

bash代码必须在干净的ubuntu18上运行,无需额外安装


Tags: path代码insrcbashforso源代码
1条回答
网友
1楼 · 发布于 2024-09-16 06:27:13

看起来你应该可以只刮一圈。
给定f=example.so.1.2.3,请尝试

$: while [[ "$f" =~ [.]so[.] ]]; do echo "$f"; f=${f%.*}; done; echo "$f"
example.so.1.2.3
example.so.1.2
example.so.1
example.so

如果您想先使用较小的,请将其通过排序

$: { while [[ "$f" =~ [.]so[.] ]]
>    do echo "$f"
>       f=${f%.*}
>    done
>    echo "$f"
>  } | sort
example.so
example.so.1
example.so.1.2
example.so.1.2.3

相关问题 更多 >