使用正则表达式批量重命名文件不起作用

问题描述

我在linux服务器上有很多具有这种格式的文件 text_text_mixturelettersnumbers.file,例如Hesperocyparis_goveniana_E00196073A.bam.baiHesperocyparis_forbesii_RBGEH19_bwa_out.txt。我想将第一个下划线更改为连字符,并保留所有其他内容,使其看起来像这样text-text_mixturelettersnumbers.file

我尝试了rename -n 's/(\w+)_(\w+_.)/$1-$2/' *及其许多不同的版本,但是什么也没有发生。有人可以指出我错了吗?

谢谢

马库斯

解决方法

util-linux rename不能仅显示结果。这是非常基本的。

如果要列出扩展名前包含两个下划线的文件,请使用

//path to .so library file
Module pkcs11Module = Module.getInstance(this.getProperties().getProperty("PKCS11_LIBRARY"));
pkcs11Module.initialize(null);
Slot[] slotsWithToken = pkcs11Module.getSlotList(Module.SlotRequirement.TOKEN_PRESENT);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
for(Slot s : slotsWithToken)    {
    Session session = s.getToken().openSession(Token.SessionType.SERIAL_SESSION,Token.SessionReadWriteBehavior.RO_SESSION,null,null);
    session.findObjectsInit(new X509PublicKeyCertificate());
    Object[] objects = null;
    while((objects = session.findObjects(1)).length > 0)    {
        for(Object c : objects) {
            X509PublicKeyCertificate cert = (X509PublicKeyCertificate) c;
            byte[] certValue = cert.getValue().getByteArrayValue();
            Certificate cc = certFactory.generateCertificate(new ByteArrayInputStream(certValue));
            if(cc instanceof X509Certificate)   {
                X509Certificate x509 = (X509Certificate) cc;
                //COMMON NAME:
                String name = new X500Name(x509.getSubjectDN().getName()).getRDNs()[0].getFirst().getValue().toString();
                Collection<List<?>> altNames = x509.getSubjectAlternativeNames();
                for(List<?> list : altNames)    {
                    ASN1Sequence seq = ASN1Sequence.getInstance(new ASN1InputStream(new ByteArrayInputStream((byte[]) list.get(1))).readObject());
                    ASN1TaggedObject obj = (ASN1TaggedObject) seq.getObjectAt(1);
                    //ALT NAME:
                    String upn = obj.getObject().toString();
                    upn = upn.substring(upn.lastIndexOf("]") + 1);
                }
            }
        }
    }
}

要实际重命名,请使用for f in *_*_*.*; do echo "$f => ${f/_/-}"; done

mv

for f in *_*_*.*; do mv -- "$f" "${f/_/-}"; done 将变量"${f/_/-}"中的第一个_替换为-

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...