打印字符串的所有前缀-从python转换为bash
我有一个shell脚本,它需要取一个打印字符串的所有前缀-从python转换为bash,python,bash,Python,Bash,我有一个shell脚本,它需要取一个。所以并获取它的所有前缀,其中前缀是名称的一部分,直到”。所以“部分+下一部分直到” 示例:对于'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
。所以
并获取它的所有前缀,其中前缀是名称的一部分,直到”。所以“
部分+下一部分直到”
示例:对于'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的试用(它还没有完成,只打印源代码。我一直在调整它,但无法让它完全按照我的要求执行):
实现这一目标的最佳方式是什么?(我猜是awk
,不过我确实尝试过使用一些ogcut、sed等。
bash代码必须在干净的ubuntu18上运行,无需额外安装看起来您应该能够在一个循环中进行刮胡子。
给定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
在awk
中执行此操作。它与awk的比例将为1:1。@ClsForCookies:请查看basename
。例如,basename示例。因此.1
将示例写入stdout。如果您需要更大的灵活性,请查看bash手册页的标题参数扩展部分,特别是删除匹配的后缀模式部分。您很有可能布莱在寻找类似这样的东西,我试图让它像你的问题一样难以理解。@oguzismail非常感谢:)你能指出我问题中的问题所在吗,这样我就知道如何解决了?
$: { 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